我想创建一个采用二维列表并输出具有相同内容的一维列表的函数。 这就是我所拥有的:
twoDlist= [[23, 34, 67],[44,5,3],[7,8,9]]
def twoone (list1):
for x in range (len(list1)):
for y in range(len(list1)):
list2=[]
list2.append(list1[x][y])
print twoone(twoDlist)
只有问题才会返回'无'。我在这做错了什么?有人可以建议一个更好的主意吗?
答案 0 :(得分:1)
这里有两个问题,第一个是你没有返回一个值,第二个是你将list2
重置为嵌套循环内的空列表,所以最后你只有一个其中的元素。
以下是修改代码的方法:
def twoone(list1):
list2 = []
for x in range(len(list1)):
for y in range(len(list1)):
list2.append(list1[x][y])
return list2
>>> twoone(twoDlist)
[23, 34, 67, 44, 5, 3, 7, 8, 9]
但是,有更好的方法可以做到这一点,请参阅jtbandes评论中的链接。
最好的方法是itertools.chain()
:
>>> from itertools import chain
>>> list(chain.from_iterable(twoDlist))
[23, 34, 67, 44, 5, 3, 7, 8, 9]
答案 1 :(得分:1)
您的方法返回None
的原因是它没有return
语句。但是,即使使用return
语句,结果也是错误的。正如其他答案所指出的那样,在循环外部初始化list2
(并返回list2
)可以解决问题。
您还可以使用嵌套列表推导来更紧凑地完成任务。
def twoone(list1):
return [val for lst in list1 for val in lst]
答案 2 :(得分:0)
它发生的原因是你在每次迭代中都将list2重新初始化为[]。尝试在forone循环中初始化list2部分。