检查列表中的部分元素是否重复

2024-09-30 06:19:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个清单,我正在填写以下方式:

complete = []
for (i,j) in list:
    complete.append('%s %s %s'%(i,j,R[i,j]))

该列表(作为示例)包含以下元素:

complete = ['B A 1', 'A H 1', 'P B 1', 'H B 1', 'B W 1', 'B M 9', 'M R 9', 'R P 9', 'P A 9', 'C S 7', 'B C 7', 'B A 7', 'A H 7', 'B P 7', 'M B 7', 'P B 7', 'H B 7']

我想检查哪些字母是重复的,在这个例子中加上相应的数字。 在这个例子中,(ba)用1和7重复,所以其中一个输出必须是'ba8'

我也可以改变我附加元素的方式来完成,但我不知道如何用其他方式

谢谢


Tags: in元素示例列表for字母方式数字
2条回答

这可以通过两个步骤非常简单地完成:

  1. 首先,获取列表中唯一字母对的列表。这将被用来编字典
  2. 接下来,遍历列表中的每个元素,并使用当前字母对索引字典。通过将元素中的最后一个字符强制转换为整数来增加字典中该字母对的键值对

>>> lst = ['B A 1', 'A H 1', 'P B 1', 'H B 1', 'B W 1', 'B M 9', 'M R 9', 'R P 9', 'P A 9', 'C S 7', 'B C 7', 'B A 7', 'A H 7', 'B P 7', 'M B 7', 'P B 7', 'H B 7']
>>> keys = set(key[:3] for key in lst)
>>> 
>>> new_dict = {key: 0 for key in keys}
>>> for el in lst:
...     new_dict[el[:3]] += int(el[4])
... 
>>> new_dict
{'B C': 7, 'H B': 8, 'R P': 9, 'B A': 8, 'B P': 7, 'B M': 9, 'P A': 9, 'A H': 8, 'C S': 7, 'M B': 7, 'M R': 9, 'P B': 8, 'B W': 1}
>>> 

你可以试试这个:

from collections import Counter, defaultdict
complete =  ['ASO BAIS 1', 'HEL CIO 5'] 

d = Counter([i[:-1] for i in complete])

new_d = defaultdict(int)

for i in complete:
   if d[i[:-1]] > 0:
     new_d[i[:-1]] += int(i[-1])

print(dict(new_d))
#maximum value:
maximum = max(new_d.values())
print(maximum)

输出:

{'HEL CIO ': 5, 'ASO BAIS ': 1}

相关问题 更多 >

    热门问题