我想在没有for循环的情况下执行以下操作。
[[elem2.count(elem1) for elem1 in list1] for elem2 in list2]
这里,list2是一个列表列表,其中包含的元素类型与list1的元素类型相同。
示例:
list1 = ['word1', 'word2', 'word3', 'word4']
list2 = [['word1', 'word3', 'word1'], ['word2', 'word1', 'word2', 'word4', 'word4', 'word4']]
结果应为:
[[2, 0, 1, 0], [1, 2, 0, 3]]
当列表很大时,嵌套的for循环需要不必要的长时间才能完成。因此,寻找更快的解决方案。
答案 0 :(得分:2)
您当前的解决方案在大型列表上花费很长时间的原因是它的O(n ** 2)。但是你可以在O(n)中做到这一点,如果你只是在一个通道中建立一个计数器,然后使用它。
for
循环不是敌人,它只是你算法复杂性的问题。
from collections import Counter
counters = [Counter(li) for li in list2]
[[cnt[x] for x in list1] for cnt in counters]
Out[9]: [[2, 0, 1, 0], [1, 2, 0, 3]]