2012-02-18 62 views
2
numbers = [1,2,3,4,5,6,7,8,9] 
number = 1 

我可以在一行写入以下内容吗?Python一个班轮?如果x在y中,请执行x

if number in numbers: 
    print number 

使用Ruby的风格:

puts number if numbers.include?(number) 

我曾尝试:

print number if number in numbers 

但语法是无效的。

+0

FWIW,另一种方式来做到这一点在Ruby是阵列路口:'放数字和[数字]'。我不知道Python中是否有简单的等价物。 – 2012-02-18 23:03:09

+0

除了下面的答案,还有[this](http://stackoverflow.com/q/9345250/988071)线程。 – mau5padd 2012-02-18 23:59:22

+0

@MarkThomas我不知道。尼斯;) – beoliver 2012-02-19 09:33:35

回答

11

Python是Python,Ruby是Ruby。我的建议不是尝试在另一个中写一个。

Python没有Ruby的/ Perl的“postfix if”,并且Pythonic写这个的方法就是你已经得到的。

但如果你真的要,这将工作:

if number in numbers: print number 

这是对官方的风格指南,PEP8,虽然:

  • 复合语句(在相同的多个语句线)通常是不鼓励的。

    是:

    if foo == 'blah': 
        do_blah_thing() 
    do_one() 
    do_two() 
    do_three() 
    

    而不是:

    if foo == 'blah': do_blah_thing() 
    do_one(); do_two(); do_three() 
    
+0

谢谢,我只是检查有没有一个小技巧,我错过了。以你的答案给出的方式写作它被认为是“不良形式”? – beoliver 2012-02-18 21:51:37

+2

是的。看我的编辑。 – Thomas 2012-02-18 22:01:55

+0

Postfix if?你的意思是[PEP 308](http://www.python.org/dev/peps/pep-0308/):-) – Irfy 2012-02-19 00:08:18

1

这应该做的伎俩:

if number in numbers: print number 

或者,如果你正在使用Python 3:

if number in numbers: print(number) 

恕我直言,可读性较差,所以我使用两个班轮。

5

python的语法是yes_value if test else no_value。为了清楚起见,可选圆括号,你可以这样说:

print "Searching...", ("Found it" if n in numbers else "Not found") 

我同意,语法是非常直观的。即使是C条件表达式也更容易阅读。

+0

你的事实很好,但我觉得你的意见令人震惊。 – 2012-02-19 04:38:36

+3

什么是如此令人震惊? – pythondjango 2012-02-19 08:56:53

2

如果添加其他“”到你原来的代码最终你会得到在Python 2.7工作构建:

print number if number in numbers else "" 

如果数字是数字那么它会被打印出来。否则,将打印一个空字符串。

但是,正如其他人所指出的,如果你真的不希望在所有执行打印语句,你必须去:

if number in numbers: print number 
相关问题