Py学习  »  Python

获取所有元素的python列表的增量计数

sandeep007 • 5 年前 • 1546 次点击  

我有一个包含2400万个元素的列表,我想迭代地增加每个元素的计数,并以更快的方式将计数存储在另一个列表中。例如,我的列表是:

a=['bike','bike','jeep','horse','horse','horse','flight','flight','cycle']

我的预期产出是

[1, 2, 1, 1, 2, 3, 1, 2, 1]

我使用的代码是

z=[]
for i in a:
   z.append(a.count(i))

但是我的输出有点不同

[2, 2, 1, 3, 3, 3, 2, 2, 1]

我对这个新创建的列表的顺序也很重要,应该基于我的列表(a)。任何帮助都是非常感谢的。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/52766
 
1546 次点击  
文章 [ 4 ]  |  最新文章 5 年前
divyang4481
Reply   •   1 楼
divyang4481    5 年前

可以使用子数组计数:

a=['bike','bike','jeep','horse','horse','horse','flight','flight','cycle']

z=[]

i = 0
while i < len(a):
    #print(a[0:i])
    #print(a[i])
    z.append(a[0:i].count(a[i]) + 1)
    i+= 1

print(z)
shiva2492
Reply   •   2 楼
shiva2492    5 年前

这里有一个解决方案-


a=['bike','bike','jeep','horse','horse','horse','flight','flight','cycle']
countArr = []
temp = {}
for i in a:
    if i in temp:
        temp[i]+=1
        countArr.append(temp.get(i))
    else:
        temp[i] = 1
        countArr.append(temp.get(i))

Green Cloak Guy
Reply   •   3 楼
Green Cloak Guy    5 年前

你可以用字典和 for 循环以完成此操作:

counts = {}
a = ['bike','bike','jeep','horse','horse','horse','flight','flight','cycle']
z = []
for i in a:
    if i in counts:
        counts[i] += 1
    else:
        counts[i] = 1
    z.append(counts[i])

print(z)
# [1, 2, 1, 1, 2, 3, 1, 2, 1]

您还可以使用列表理解来完成这项有趣的工作,它利用了元组的求值顺序,并且基本上与上面一样 对于 循环但浓缩成一行:

counts = {}
z = [(counts.__setitem__(i, counts[i] + 1 if i in counts else 1), counts[i])[1] for i in a]
print(z)
# [1, 2, 1, 1, 2, 3, 1, 2, 1]
Jay
Reply   •   4 楼
Jay    5 年前

根据您的预期输出,由于您需要元素计数,直到您在该时间点迭代的列表的索引为止,下面的代码应该可以工作:

from collections import defaultdict

a=['bike','bike','jeep','horse','horse','horse','flight','flight','cycle']

a_dict = defaultdict(int)
a_output = []

for x in a:
    a_dict[x] += 1
    a_output.append(a_dict[x])

print(a_output)

输出:

[1, 2, 1, 1, 2, 3, 1, 2, 1]