有没有一种方法可以按索引合并多个列表索引?

use*_*528 2 python indexing list

例如,我有三个列表(长度相同)

A = [1,2,3]
B = [a,b,c]
C = [x,y,z]
Run Code Online (Sandbox Code Playgroud)

我想将其合并为:[[1,a,x],[2,b,y],[3,c,z]]。

这是我到目前为止的内容:

define merger(A,B,C):
  answer = 
  for y in range (len(A)):
    a = A[y]
    b = B[y]
    c = C[y]
    temp = [a,b,c]
    answer = answer.extend(temp)
  return answer
Run Code Online (Sandbox Code Playgroud)

收到错误:

'NoneType'对象没有属性'extend'

lvc*_*lvc 6

看起来您的代码是要说的answer = [],而忽略它会导致问题。但是您遇到的主要问题是:

answer = answer.extend(temp)
Run Code Online (Sandbox Code Playgroud)

extend 修改answer并返回无。保持这种状态answer.extend(temp),它会起作用。您可能还想使用该append方法而不是extend- append在 的末尾放置一个对象(列表tempanswer,同时单独extend附加temp 的每个项目,最终提供您所追求的扁平版本:[1, 'a', 'x', 2, 'b', 'y', 3, 'c', 'z']

但是,与其重新发明轮子,这正是内置zip函数的用途:

>>> A = [1,2,3]
>>> B = ['a', 'b', 'c']
>>> C = ['x', 'y', 'z']
>>> list(zip(A, B, C))
[(1, 'a', 'x'), (2, 'b', 'y'), (3, 'c', 'z')]
Run Code Online (Sandbox Code Playgroud)

请注意,在 Python 2 中,zip返回元组列表;在 Python 3 中,它返回一个惰性迭代器(即,它根据请求构建元组,而不是预先计算它们)。如果您想要 Python 3 中的 Python 2 行为,您可以list像我上面所做的那样传递它。如果您想要 Python 2 中的 Python 3 行为,请使用izipitertools 中的函数。


Chr*_*ian 5

要获取列表列表,可以使用内置函数zip()列表推导zip()a 结果的每个元素从a转换tuple为a list

A = [1, 2, 3]
B = [4, 5, 6]
C = [7, 8, 9]

X = [list(e) for e in zip(A, B, C,)]

print X
>>> [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
Run Code Online (Sandbox Code Playgroud)