gpt4 book ai didi

Python 遍历两个列表只遍历最后一个元素

转载 作者:太空宇宙 更新时间:2023-11-04 00:08:23 24 4
gpt4 key购买 nike

我正在尝试遍历双重列表,但得到的结果不正确。我正在尝试获取列表中每个元素的计数。

l = [['<s>', 'a', 'a', 'b', 'b', 'c', 'c', '</s>'], ['<s>', 'a', 'c', 'b', 'c', '</s>'], ['<s>', 'b', 'c', 'c', 'a', 'b', '</s>']]

dict = {}

for words in l:
for letters in words:
dict[letters] = words.count(letters)


for x in countVocabDict:
print(x + ":" + str(countVocabDict[x]))

此刻,我得到:

<s>:1
a:1
b:2
c:2
</s>:1

它似乎只是在遍历 'l' : ['<s>', 'b', 'c', 'c', 'a', 'b', '</s>'] 中的最后一个列表。

但我想得到:

<s>: 3
a: 4
b: 5
c: 6
</s>:3

最佳答案

在每个内部 for 循环中,您不是在 dict[letters] 的当前值中添加,而是将其设置为任何数量计入名为 word 的当前子列表(特别地)。

用普通的 dict 修复你的代码:

>>> l = [['<s>', 'a', 'a', 'b', 'b', 'c', 'c', '</s>'], ['<s>', 'a', 'c', 'b', 'c', '</s>'], ['<s>', 'b', 'c', 'c', 'a', 'b', '</s>']]
>>> d = {}
>>>
>>> for sublist in l:
...: for x in sublist:
...: d[x] = d.get(x, 0) + 1
>>> d
{'<s>': 3, 'a': 4, 'b': 5, 'c': 6, '</s>': 3}

请注意,我没有在每个内部 for 循环中调用 list.count。调用 count 将一次又一次地遍历整个列表。每次看到一个值时只添加 1 效率要高得多,这可以通过只查看(子)列表的每个元素一次来完成。

使用计数器

>>> from collections import Counter                                         
>>> Counter(x for sub in l for x in sub)
Counter({'<s>': 3, 'a': 4, 'b': 5, 'c': 6, '</s>': 3})

使用 Counter 并且不手动解除嵌套列表:

>>> from collections import Counter                                         
>>> from itertools import chain
>>> Counter(chain.from_iterable(l))
Counter({'<s>': 3, 'a': 4, 'b': 5, 'c': 6, '</s>': 3})

关于Python 遍历两个列表只遍历最后一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53302069/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com