例如,我有三个列表(长度相同)
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'
答案 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)]