【问题标题】:How can I add different elements to a list in a list? Python 3如何将不同的元素添加到列表中的列表中?蟒蛇 3
【发布时间】:2012-09-29 19:13:55
【问题描述】:
f = open("sonad.txt",encoding="utf-8")
c = f.readlines()
blokk = [[]] * 15
for read in c:
    length = len(read.strip())
    blokk[length].append(read.strip())

sonad.txt 有一些随机单词,我想将它们按如下顺序排列:

所有 1 个字母长的单词都转到 blokk[1] 2 个字母长到 blokk[2] 等等……

但我当前的代码所做的是它向 allL 块 [x] 添加一个元素,以便 blokk[1] blokk[2] blokk[3] .....都是一样的。

【问题讨论】:

    标签: python arrays list append


    【解决方案1】:

    blokk = [[]] * 15 行创建了一个列表,其中包含 15 次相同的空列表

    您想改用列表推导:

    blokk = [[] for _ in range(15)]
    

    自己试试吧:

    >>> blokk = [[]]*15
    >>> blokk
    [[], [], [], [], [], [], [], [], [], [], [], [], [], [], []]
    >>> blokk[0].append(1)
    >>> blokk
    [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1]]
    >>> blokk = [[] for _ in range(15)]
    >>> blokk
    [[], [], [], [], [], [], [], [], [], [], [], [], [], [], []]
    >>> blokk[0].append(1)
    >>> blokk
    [[1], [], [], [], [], [], [], [], [], [], [], [], [], [], []]
    

    【讨论】:

    • 太完美了! :) 我不希望在 3 分钟内得到答复。哇,谢谢。
    【解决方案2】:
     blokk = [[]]*15
    

    创建 15 个对同一个列表的引用。因此,如果您附加到 blokk[0]block[1],这些更改将反映在任一列表中,因为它们是同一个列表。

    也许这里更好的数据结构是defaultdict

    from collections import defaultdict
    d = defaultdict(list)
    with open('sonad.txt', encoding='utf-8') as fin:
        for line in fin:
            stripped = line.strip()
            d[len(stripped)].append(stripped)
    
    print(sorted(d.items()))
    

    【讨论】:

    • @lazyr -- 感谢您的清理。显然我试图太仓促(但我必须要打败 Martijn ;)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-18
    • 2021-09-10
    • 2023-04-04
    • 2015-08-01
    • 1970-01-01
    • 2023-01-13
    相关资源
    最近更新 更多