簡體   English   中英

如果元素在列表中,則打印“ Foo”

[英]Print “Foo” if an element is in a list

我努力了:

>>> l = [1,2,3]
>>> x = 1
>>> x in l and lambda: print("Foo")
    x in l && print "Horray"
            ^
SyntaxError: invalid syntax

一點點谷歌搜索發現printpython2一條語句,而它是python3的一個函數。 但是,我已經嘗試了以上在python3中的python3 ,並拋出了SyntaxError異常。

關於如何在一行中執行此操作的任何想法? (可讀性或google編程習慣在這里不是問題)

l = [1, 2, 3]
x = 1
if x in l: print "Foo"

我不是一個聰明的驢子,這是做它在同一行的方式。 或者,如果您使用的是Python3:

if x in l: print("Foo")

lambda可以創建lambda。 需要調用它來執行它。 您不能那樣做,因為Python不允許在這種情況下使用語句,而僅允許表達式(包括函數調用)。

要使print在Python 2.x中成為函數,請嘗試:

from __future__ import print_function
x in l and print('foo')

但是要小心。 如果你試試:

x in l and print('foo') or print('bar')

它不會起作用,因為print返回None ,所以first and expression為False,因此將同時執行兩個print 在Python 3.x中,您不需要導入。

如果您不會遇到復雜的短路情況(即,一個andor ),或者您知道函數或表達式不會讓短路邏輯感到驚訝,那么代碼就沒有錯。 否則,請嘗試非短路式1缸套:

print('foo') if x in l else print('bar')

這種形式的推薦僅當條件的概率/預期為True是遠遠大於被假高。 否則,簡單的老式if-elseif-else的方法。

第一步,使用from __future__ import print_function在Python2.x中作為語句的缺點。 然后,以下所有工作:

x in l and (lambda: print("yes"))()       # what an overkill!
(x in l or print("no")) and print("yes")  # note the order, print returns None
print("yes") if x in l else print("no")   # typical A if Cond else Y
print("yes" if x in l else "no")          # a more condensed form

為了獲得更多的樂趣,如果您對此感興趣,可以考慮一下-根據x in l條件打印並返回True或False(為得到False,我使用了double not):

def check_and_print(x, l):
    return x in l and not print("yes") or not not print("no")

那太丑了。 要使打印透明,您可以定義其他兩個版本的打印,它們返回True或False。 這實際上可能對日志記錄很有用:

def trueprint(*args, **kwargs):
    print(*args, **kwargs)
    return True

def falseprint(*args, **kwargs):
    return not trueprint(*args, **kwargs)

result = x in l and trueprint("yes") or falseprint("no")
  1. 如果要在真假情況下都打印不同的內容,請使用條件表達式創建要打印的值: print ('foo' if x in l else 'bar')

  2. 如果您只想使用Python 2中的函數輸出,則可以嘗試sys.stdout.write (當然,在您首次import sys之后),但是請記住,這遠遠沒有那么靈活。 在這里,您將標准輸出視為類似於文件的對象(它是)。

  3. lambda幾乎可以肯定在這里買不到任何東西。

  4. 使用和/或鏈接技巧絕非Pythonic。 人們無論如何都在為這些駭客而苦苦掙扎的事實,知道它們的可怕程度,這正是為什么將第1點中的條件表達式添加到語言中的原因。 關於語法有很多討論。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM