有没有办法按索引合并多个列表索引?

时间:2014-03-23 22:28:39

标签: python list indexing

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

A = [1,2,3]
B = [a,b,c]
C = [x,y,z]

我希望将其合并为: [[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

收到错误:

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

4 个答案:

答案 0 :(得分:4)

要获取列表,您可以使用内置函数zip()列表理解来转换{{{}的结果的每个元素1}}从zip()tuple

list

答案 1 :(得分:3)

看起来您的代码应该说answer = [],而将其删除会导致问题。但你遇到的主要问题是:

answer = answer.extend(temp)

extend 修改answer 并返回None。将其保留为answer.extend(temp),它将起作用。您可能还想使用append方法而不是extend - 在temp的末尾添加一个对象(列表answer) ,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')]

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

答案 2 :(得分:1)

假设你是在课堂上这样做而不是学习所有使Python成为一个很好的工具的技巧就是你需要的。你有两个问题,首先如果你想扩展然后你做到了,但你想要的结果显示你想要追加,而不是扩展

def 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.append(temp)
   return answer


>>> answer
[[1, 'a', 'x'], [2, 'b', 'y'], [3, 'c', 'z']]

答案 3 :(得分:0)

我只是想知道同一件事。我是一个使用代码学院的菜鸟。这就是我想在索引处合并两个列表索引的原因

toppings = ['pepperoni', 'pineapple', 'cheese', 'sausage', 'olives', 'anchovies',    'mushrooms']

prices = [2,6,1,3,2,7,2]

num_pizzas = len(toppings)

print("We sell "+str(num_pizzas)+" different kinds of pizza!")

***pizzas = list(zip(toppings, prices))***

print (pizzas)

打印出的比萨饼清单... [((pepperoni',2),('pineapple',6),('cheese',1),('sausage',3),('olives',2 ),(“凤尾鱼”,7),(“蘑菇”,2)]