gpt4 book ai didi

python - 迭代包含重复元素的列表

转载 作者:行者123 更新时间:2023-12-01 05:43:33 25 4
gpt4 key购买 nike

我正在尝试迭代包含一些重复元素的列表。我正在使用重复项的数量,因此我不想在迭代列表之前将列表放入集合中。

我试图计算该元素出现的次数,然后写下该元素(名称)和它出现的次数。

我遇到的问题是,在我的输出 CSV 文件中,行数与元素出现的次数一样多。我在 CSV 完成后将其写入 HTML 表,因此我希望对其进行重复数据删除。

我的最终目标是让它计算名称出现的次数,然后向包含名称和计数的 CSV 文件写入一行,然后移至列表中的下一个名称。

我尝试搜索并发现了 itertools.groupby,但我不确定这在这种情况下是否有用,如果有用,如何正确使用它。

感谢您的帮助。

编辑:我忘了提及 - Python 2.6

with open(sys.argv[1]) as infile:
rdr = csv.DictReader(infile, dialect='excel')
qualsin = []
headers = ['Qualifier Name','Appointments']
for row in rdr:
row['Qualifier Name'] = row['Qualifier Name'].upper()
qualsin.append(row['Qualifier Name'])
qualsin.sort()
#total = 0
with open('tempwork.csv', 'w') as tempwork:
wrtr = csv.writer(tempwork, dialect='excel')
wrtr.writerow(headers)
for quals in qualsin:
d = [quals, qualsin.count(quals)]
#a = dict((key, value) for (key, value) in d)
#total += qualsin.count(quals)
wrtr.writerow(d)

最佳答案

您可以删除一组其他名称,然后使用原始列表进行计数。

例如,给定qualsin = [0, 2, 3, 2, 3, 1, 2, 3, 5, 3, 3, 2, 4]:

set_quals = set(qualsin) # This is set([0, 1, 2, 3, 4, 5])
for quals in set_quals: # Iterate over the values in the set, not the list
d = [quals, qualsin.count(quals) # count the values from the list, not the set
wrtr.writerow(d)

或者...

import collections

...
set_quals = set(qualsin) # This is set([0, 1, 2, 3, 4, 5])
counts = collections.Counter(qualsin) # This is Counter({3: 5, 2: 4, 0: 1, 1: 1, 4: 1, 5: 1}) which acts like a dictionary
for quals in set_quals:
d = [quals, counts[quals]] # use the name from the set and the value from the Counter
wrtr.writerow(d)

编辑
由于您更新使用Python2.6,Counter不可用。但是,第一个解决方案仍然有效。

您可以通过以下操作自己制作一个计数器:

counts = collections.defaultdict(int) # Available since 2.5
for quals in qualsin:
counts[quals] += 1

如果我没记错的话,使用计数器(无论是在 2.7 中还是像上面那样自行开发)都会将时间复杂度降低 N 倍。 list.count 是 O(N),并且您在循环中执行此操作,因此您得到 O(N^2)。创建计数器的单次迭代仅为 O(N),因此对于较大的列表,这可能会有很大帮助。

编辑2

要按字母顺序排序输出,您要做的就是将去重列表(集)转换回排序列表。

ordered_deduped_quals = sorted(set(qualsin))
for quals in ordered_deduped_quals:
...

关于python - 迭代包含重复元素的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16844729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com