Python:在列表中生成元组

时间:2014-03-08 23:02:24

标签: python

有没有一种优雅/替代的方式来做到这一点:

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)]]]

3 个答案:

答案 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是小写的。含义RedGreenBlue 命名为redgreenblue。 :)

答案 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) ]