有没有一种优雅/替代的方式来做到这一点:
allcolors = []
for Red in range(0,256):
for Green in range(0,256):
for Blue in range(0,256):
allcolors.append((Red,Green,Blue))
我在想像(伪代码):
[Red for Red in [Green for Green in [Blue for Blue in range(0,256)]]]
答案 0 :(得分:3)
这将有效:
allcolors = [(Red,Green,Blue) for Red in range(0,256) for Green in range(0,256) for Blue in range(0,256)]
在list comprehensions中,for ... in ...
子句的顺序与for循环的顺序相同。
其次,传递给range
的0在这里是多余的,因为range
默认从0开始。换句话说,你可以更加巧妙地写出相同的东西:
allcolors = [(Red,Green,Blue) for Red in range(256) for Green in range(256) for Blue in range(256)]
此外,如果您使用的是Python 2.x,则应使用xrange
代替range
:
allcolors = [(Red,Green,Blue) for Red in xrange(256) for Green in xrange(256) for Blue in xrange(256)]
这是因为xrange
会返回iterator,而不是像range
那样构建不必要的列表。
最后,Python变量名的convention是小写的。含义Red
,Green
和Blue
应命名为red
,green
和blue
。 :)
答案 1 :(得分:1)
您可以尝试使用list comprehension:
allcolors = [(r, g, b) for r in xrange(0, 256) for g in xrange(0, 256) for b in xrange(0, 256)]
答案 2 :(得分:0)
这样的事情:
allcolors = [ (Red,Green,Blue) for Red in range(0,256) for Green in range(0,256) for Blue in range(0,256) ]
您可以通过这样思考将您的循环转换为列表理解:
[(Red,Green,Blue) for Red in range(0,256)
for Green in range(0,256)
for Blue in range(0,256) ]