Как перебрать строку и найти дублированные значения

Основываясь на нескольких изменениях в ответе Суниты (мне нужно, чтобы он оставался 1-м массивом и поддерживал объекты в качестве элементов), это то, что я закончил с

l = len(results)
if(l>0):
    n = int(l/3)+1 if l%3 else int(l/3)
    results = np.array(list(filter((0).__ne__,np.pad(np.array(results), ((0,n*3-l)), mode='constant').reshape((n,3), order='F').flatten())),dtype=object)
0
задан sccoding 19 January 2019 в 06:27
поделиться

2 ответа

Используйте collections.Counter для подсчета каждого элемента и выбирайте только те, чье количество превышает 1:

from collections import Counter

subjects2 = ['hi', 'hi', 'bi', 'ki', 'si', 'bi', 'li']
nosubjects = [x for x, i in Counter(subjects2).items() if i > 1]

print(nosubjects)
# ['hi', 'bi']
0
ответ дан Austin 19 January 2019 в 06:27
поделиться

Проблемы в вашем коде:

  • Вы пытаетесь проверить счетчик каждого элемента в списке, из-за чего дублированные элементы будут проверяться несколько раз.
  • Вы печатаете nosubjects внутри условия if, что приведет к его многократной печати

Используйте sets. Сначала нужно получить уникальный набор элементов в списке, затем вы можете проверить, превышает ли количество каждого элемента в наборе 1 в исходном списке.

nosubjects = []
subjects2 = ['hi','hi','bi','ki','si','bi','li']

for i in set(subjects2):
  if subjects2.count(i)>=2:
    nosubjects.append(i)

print(nosubjects)

Использование списка понимания:

subjects2 = ['hi','hi','bi','ki','si','bi','li']

nosubjects = [i for i in set(subjects2) if subjects2.count(i) >=2]    
print(nosubjects)
0
ответ дан Jay 19 January 2019 в 06:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: