社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

sandeep007 • 4 年前 • 696 次点击  

我有一个包含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
 
696 次点击  
文章 [ 4 ]  |  最新文章 4 年前
divyang4481
Reply   •   1 楼
divyang4481    4 年前

可以使用子数组计数:

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    4 年前

这里有一个解决方案-


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    4 年前

你可以用字典和 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    4 年前

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

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]