0

蟒蛇 2.7

Ubuntu 12.04

我试图把这个:

nine = []
for each in word_list:
    if len(each) == 9:
        nine.append(each)
return random.choice(nine)

进入这个:

return random.choice([i if len(i) == 9 for i in words])

然而,这给了我一个语法错误,我相信这个顺序是正确的,那么是什么导致它失败?

4

3 回答 3

8

如果您没有其他部分,if则必须在最后。所以改变

[i if len(i) == 9 for i in words]

[i for i in words if len(i) == 9]
于 2013-11-06T07:59:05.857 回答
4

使用过滤器(因为那是你正在做的)

random.choice(filter(lambda x: len(x) == 9, words))
于 2013-11-06T08:01:07.137 回答
3

当您使用条件语句/三元运算符时,您必须提供一个else:部分。尝试类似:

return random.choice([i if len(i) == 9 else '' for i in words])

当然,您可能有机会random.choice()返回一个空字符串。如果您希望列表推导i 在长度为 9 时返回,那么您可以将条件放在列表推导的末尾,这不需要else:

return random.choice([i for i in words if len(i) == 9])
于 2013-11-06T07:59:10.640 回答