【发布时间】:2017-10-14 07:02:05
【问题描述】:
我对编程完全陌生(不到 2 个月 - 自学),我正在做一个项目,它需要每个内部列表的前两个索引的列表列表频率。
这是我的清单:
x = [['block', 3], ['street', 2], ['lamp',1], ['street', 2], ['工业', 3], ['公园', 2], ['公园', 3], ['工业', 3], ['block', 3], ['street', 2], ['lamp',1], ['street', 2], ['industrial', 3], ['公园', 2]]
所以每个内部列表的第一个值是一个 TITLE,第二个是一个 CONVENTIONAL VALUE。
重要的是,您可以看到其中一些重复(重复)。
我想要一个这样的列表输出列表:
p = [['block', 3, 2], ['street', 2, 4], ['灯', 1, 2], ['工业', 3, 3], ['公园', 2, 2], ['公园', 3, 1]]
在外部列表 x 中,使用第三个值作为内部列表的频率。
所以这是我的非 Pythonic(可能是枯燥的)方法:
x = [['block', 3], ['street', 2], ['lamp',1], ['street', 2], ['industrial', 3], ['park', 2], ['park', 3], ['industrial', 3], ['block', 3], ['street', 2], ['lamp',1], ['street', 2], ['industrial', 3], ['park', 2]]
p = []
for a in x:
p.append(a ), a.append( x.count(a))
print p # checkpoint
i= 0
while i < len(p):
for j in range(len(p)):
if i == j:
print i, ' = ', j
break
else:
if p[i][:2] == p[j][:2]:
print p[i][:2], '==', p[j][:2]
p.pop(i)
i = 0
j=0
break
i = i+1
print p # the list of lists I'm desired
但是对于我的项目,因为这个函数后面跟着其他函数,与它们相比,这个函数的运行时间很长,尤其是对于大量输入数据集。
由于我缺乏知识,我无法优化我编写的代码。
所以我想问有没有更快、更 Python 的方式来做到这一点?
【问题讨论】:
标签: python list duplicates frequency