【问题标题】:How to append two-dimensional python list without for loop?如何在没有for循环的情况下附加二维python列表?
【发布时间】:2018-08-05 21:56:06
【问题描述】:

假设我有 3 个 10x5 维度的 python 二维列表(data_1data_2data_3)。我想从它们中制作一个 30x5 尺寸的列表 (all_data)。现在,我通过应用以下内容来做到这一点:

data_1 = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], ..., [46, 47, 48, 49, 50]]
data_2 = [[101, 102, 103, 104, 105], [106, 107, 108, 109, 110], ..., [146, 147, 148, 149, 150]]
data_3 = [[201, 202, 203, 204, 205], [206, 207, 208, 209, 210], ..., [246, 247, 248, 249, 250]]
all_data = []
for index, item in enumerate(data_1):
    all_data.append(item)

for index, item in enumerate(data_2):
    all_data.append(item)

for index, item in enumerate(data_3):
    all_data.append(item)

如果我只是做这样的事情:

all_data.append(data_1)
all_data.append(data_2)
all_data.append(data_3)

然后我得到一个 3x10x5 的列表,这不是我想要的。

那么我可以通过附加三个 10x5 列表而不使用任何 for 循环来创建一个 30x5 列表吗?

【问题讨论】:

标签: python arrays list append


【解决方案1】:

你可以extend你的名单。

data = []
data.extend(d1)
data.extend(d2)
data.extend(d3)

【讨论】:

  • 感谢您的回复,但这会生成一个 10x15 的列表,而不是初始列表中的 30x5 列表...
  • 不,它没有(就像您评论的每个答案一样)。考虑分享您的清单。
【解决方案2】:

简单写:

all_data = data_1 + data_2 + data_3

如果要合并这些列表对应的所有子列表,可以这样写:

# function that merges all sublists in single list
def flatten(l):
    return [el for subl in l for el in subl]

# zipped - is a list of tuples of corresponding items (our deep sublists) of all the lists
zipped = zip(data_1, data_3, data_3)

# merge tuples to get single list of rearranges sublists
all_data = flatten(zipped)

【讨论】:

  • 感谢您的回复,但这会生成一个 10x15 的列表,而不是初始列表中的 30x5 列表...
  • 如果data_1data_2data_3包含子列表,data_1有什么维度?它的子列表有哪些维度?
  • 感谢您完成问题。我为我的答案添加了一个替代选项。但是我认为您对所需列表的尺寸有误。第一个选项应该给出 30 * 5 的尺寸。
  • 再次感谢您的正确回复(两票)。
【解决方案3】:

怎么样:

all_data = data_1 + data_2 + data_3

【讨论】:

  • 感谢您的回复,但这会生成一个 10x15 的列表,而不是初始列表中的 30x5 列表...
  • @Universalis 你能给我举个例子吗?因为我发布的内容与您在上面描述的一样 - 即将 3 个列表的元素(无论是否列出)放入一个列表中。 “10x5”列表是什么样的?
  • 我认为他甚至不知道他的列表长什么样。
  • @jsmolka 在任何答案中运行他的代码并比较输出非常简单......无论如何。
  • 这些只是一维列表,没有二维的。
【解决方案4】:

这应该可行:

data=[]
data[len(data):] = data1
data[len(data):] = data2
data[len(data):] = data3

【讨论】:

    【解决方案5】:

    如果你不介意它很懒,你也可以这样做

    import itertools
    
    all_data = itertools.chain(data1, data2, data3)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-26
      • 2019-10-10
      • 2020-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多