作为Python的初学者(SAGE),我想把这个for循环的输出 列表:
for y in [0,8] :
for z in [0,1,2,3] :
x=y+z
print x
输出
0
1
2
3
8
9
10
11
(垂直地)。我想要一个列表,以便我可以将它用于以后的操作: 我想要[1,2,3,8,9,10,11]。 我发现了一个类似的问题,我意识到输出是重新计算的 每一次。有没有一种简单的方法将它们存储在列表中?根据对另一个答案的建议,我试着"追加"像这样,但它给出了一条错误信息:
x=[]
for y in [0,2*3] :
for z in [0,1,2,3] :
x=y+z
x.append(x)
print x
答案 0 :(得分:1)
这应该可以解决问题:
lst = [y+z for y in [0,8] for z in [0,1,2,3]]
print(lst) # prints: [1,2,3,8,9,10,11]
您的代码无法正常工作的原因是因为您使用变量x
来处理两个不同的事情。首先将其分配给列表,然后将其分配给整数。
所以python认为x
是一个整数,整数不具有属性append()
。因此Python引发了错误。补救措施只是为变量命名不同的东西。但是,您应该使用比x
,y
和z
更具描述性的内容,除非他们的“一次性”'变量
答案 1 :(得分:0)
因为您在此行设置了从 end_game = input("To exit enter N, to play again enter any key ")
if end_game == 'n' or end_game == 'N':
print("THANKS FOR PLAYING " + user_name + '!')
break
到x
的变量list
:int
。
x = y + z
- 循环不具有函数或类的作用域,因此如果将变量设置在循环之外,则变量与循环中的变量相同。
答案 2 :(得分:0)
试试这个:
import itertools
temp = [y+z for y,z in list(itertools.product([0,8], [0,1,2,3]))]
答案 3 :(得分:0)
您还可以使用itertools.product:
在功能上进行此操作from itertools import product
lst = [y + z for y, z in product([0, 8], [0, 1, 2, 3])]
print(lst)
将输出[0, 1, 2, 3, 8, 9, 10, 11]
。
答案 4 :(得分:0)
尝试:
x = [y+z for y in [0,8] for z in [0,1,2,3]]
答案 5 :(得分:0)
您可以简单地使用列表推导,例如:
>>> lst = [y+z for y in [0,8] for z in [0,1,2,3]]
>>> lst
[0, 1, 2, 3, 8, 9, 10, 11]
任何Python程序员都非常清楚。
或者您可以使用range
:
>>> lst=[]
>>> for l in (range(i, i+4) for i in [0, 8]):
... lst.extend(l)
>>> lst
[0, 1, 2, 3, 8, 9, 10, 11]
或者,因为有些人似乎喜欢复杂的答案:
>>> import itertools
>>> lst = list(itertools.chain(*[range(i, i+4) for i in [0,8]]))
>>> lst
[0, 1, 2, 3, 8, 9, 10, 11]
答案 6 :(得分:0)
你有很多方法!首先,作为原始代码,您可以这样做:
lst=[]
for y in [0,8] :
for z in [0,1,2,3] :
x=y+z
lst.append(x)
print lst
您可以尝试list comprehension
:
lst = [y+z for y in [0,8] for z in [0,1,2,3]]
print lst
您还可以使用itertool chain
:
import itertools
lst = list(itertools.chain(*[range(i, i+4) for i in [0,8]]))
print lst
另一种方式是itertool products
:
import itertools
lst = [y+z for y,z in list(itertools.product([0,8], [0,1,2,3]))]
print lst
在所有情况下,output
都是:[0, 1, 2, 3, 8, 9, 10, 11]