【问题标题】:Adding values to a list in a list in Python将值添加到 Python 中的列表中的列表
【发布时间】:2012-02-13 21:03:15
【问题描述】:

我对 Python 还很陌生,到目前为止,我能编写代码的唯一方法就是盲目地挥动我的键盘。因此,我确信以下内容不起作用是有充分理由的:

l = []

grouping = compactlist.index(namelist[n])
l[grouping].append(start[n])
l[grouping].append(end[n])

所以我要做的是从start 列表中获取一个值并将其添加到l 中的列表中——它将取决于grouping 的值。 (然后对end 执行相同的操作)。这需要动态创建l 中的列表,我认为这是问题所在。

【问题讨论】:

    标签: python list append


    【解决方案1】:

    您可以像l = [[], []] 一样启动 l,但实际上听起来更像是您想使用 defaultdict 作为您的数据结构。这可以即时创建您的列表,例如

    >>> import collections
    >>> thing = collections.defaultdict(list)
    >>> thing[0].append('spam')
    >>> thing[1].append('eggs')
    >>> print thing
    defaultdict(<type 'list'>, {0: ['spam'], 1: ['eggs']})
    >>> thing[0]
    ['spam']
    >>> thing[69]
    []
    

    【讨论】:

    • 如果你不能提前知道你需要什么钥匙,这就是这样做的方法。在顶层使用字典,而不是列表。并且 defaultdict 意味着您不需要显式创建列表。
    • 使用dictdefaultdict 的唯一潜在问题是键没有固有的顺序,这可能会或可能不会取决于您正在做什么以及是否(或如何)你想迭代它们的关联值。
    • 谢谢,我想我会尝试使用 defaultdict。幸运的是,订购并不重要。
    【解决方案2】:

    尝试从

    l = [[],[]]
    

    这将为您提供一个包含两个空列表的列表,您可以使用您已经编写的代码附加到其中一个。

    编辑

    正如您在评论中提到的,您将需要两个以上的列表。如果您事先知道需要多少,那么您可以像这样扩展此技术:

    l = [[] for x in range( number_of_lists )]
    

    如果您事先知道,或者如果您不一定会生成像 0、1、2、3、... 这样的常规数字,那么您就不会想要一个列表列表*。在这种情况下,您需要一个列表字典。 @wim的答案是这种情况下的最佳解决方案。

    * 相反,您的 grouping 值可能会是 100、20000、300000 等。在这种情况下,您真的不想要列表。

    【讨论】:

    • Ack,我的错! grouping 不会只给出 0 或 1,可能还有更多的值。对不起!立即编辑。
    • @lowercasename l = [[]] * number_of_lists 几乎肯定不是你想要的。它创建一个包含number_of_lists references单个空列表 的列表。通常人们从不想要这个,因为它使l[n].append(something) 的行为非常不直观;尝试在 Python 提示符下输入以下内容:l = [[]] * 10; print l; l[3].append('weird'); print l.
    • 为了避免@Ben 所说的使用l = [[] for i in range(number_of_lists)]
    猜你喜欢
    • 2020-09-10
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多