4 回答
TA贡献1806条经验 获得超5个赞
您的算法不一定是二次时间。以下为线性
from collections import Counter
resl2 = [k for k,v in Counter(resl).items() if v > 500]
如果您需要对它们进行排序,请执行类似操作
resl2 = [(k,v) for k,v in Counter(resl).items() if v > 500]
resl2.sort(key=lambda kv: kv[1])
resl2 = [k for k,v in resl2]
TA贡献1775条经验 获得超8个赞
请注意,它表示数组中的元素,而不是整数i
for i in resl:
if resl.count(i) > 500:
resl2.append(i)
print(resl2)
将其更改为此。
for i in range(0,len(resl)-1):
if i > 500:
resl2.append(resl[i])
print(resl2)
TA贡献1883条经验 获得超3个赞
您可以使用set ;)
在这里,您有一个文件列表的最小示例,并在它出现2次时显示:
files = ['10.gif', '8.gif', '0.gif', '0.doc', '0.gif', '0.gif', '0.tmp', '0.doc', '0.gif']
file_set = set(files)
files_freq = [0]*len(file_set)
for n,file in enumerate(file_set):
files_freq[n] = files.count(file)
sorted_list = [f for n,f in sorted(zip(files_freq, file_set), key=lambda x: x[0], reverse=True) if n >= 2]
print(sorted_list)
输出将为:['0.gif', '0.doc']
将仅将列表筛选为每个文件的唯一实例,循环将计算每个文件的计数。set
之后,幽灵般的列表理解是诀窍!
[f for n,f in sorted(zip(files_freq, file_set), key=lambda x: x[0], reverse=True) if n >= 2]
这将创建一个仅包含出现2次或更多次的文件的列表,然后该部分强制函数使用第一个 from 进行排序,并按后代顺序对列表进行排序,显示之前的最高频率。keysortedfiles_freqzip(files_freq, file_set)reverse
添加回答
举报