python中的嵌套列表和for循环程序给了我一个疯狂的结果

时间:2014-03-23 19:11:07

标签: python list for-loop python-3.3 nested-lists

我是python的新手,最近我一直在学习列表和词典。我陷入了另一个列表中的列表练习(换句话说,嵌套列表)。

这个程序的想法是采用这两个列表:

listOne = list(range(1, 100))

listTwo = list(range(99, 0, -1))

并且程序应该采用,例如,第一个列表的元素0和第二个列表的元素0,依此类推,使用以下数字,答案应该是:

[[1,99],[2,98],[3,97], .....]

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

listOne = list(range(1, 100))
listTwo = list(range(99, 0, -1))
listThree = []

for x in listOne:
    for y in listTwo:
        listThree.append((x, y))

print(listThree)

但是,当我运行此程序时,计算机会打印一个巨大且疯狂的结果,大约需要5秒钟才能打印结果。我希望这个程序尽可能简单,因为我没有学到很多东西。如果您对更有效地使用嵌套列表有任何建议,请告诉我们。谢谢!

3 个答案:

答案 0 :(得分:2)

您的循环尝试枚举listOne和listTwo中每个可能的元素组合。 以下是否达到了你想要的(在python 2.7.6中)?

for index in range(len(listOne)): listThree.append((listOne[index],listTwo[index]))

答案 1 :(得分:0)

在这里使用列表理解会更容易:

listOne = list(range(1,100))
listTwo = list(reversed(listOne))
listThree = [[x, 100-x] for x in range(1,100)]

zip

listThree = zip(listOne, listTwo) # tuples are results
listThree = zip(listOne, reversed(listOne)) # tuples are results
listThree = map(list, zip(listOne, listTwo)) # list are results
listThree = [[a,b] for a,b in zip(listOne, listTwo)] # list are results

如果您不需要两个第一个列表,您可以将其链接为一行:

listThree = list(map(list, zip(range(1,100), reversed(range(1,100))))) # result is list of lists
listThree =  list(zip(range(1,100), reversed(range(1,100)))) # result is list of tuples

答案 2 :(得分:0)

获取您正在寻找的输出列表的最简单方法是使用zip function

listOne = list(range(1, 100))
listTwo = list(range(99, 0, -1))

print(zip(listOne, listTwo))