簡體   English   中英

if語句條件是否與多個變量互斥?

[英]Is the if statement condition mutually-exclusive to multiple variables?

假設我有三個列表,並且想將所有整數元素添加到名為int_list的列表中:

test1 = [1, 2, 3, "b", 6]
test2 = [1, "foo", "bar", 7]
test3 = ["more stuff", 1, 4, 99]
int_list = []

我知道我可以執行以下代碼將所有整數附加到新列表中:

for elem1, elem2, elem3 in zip(test1, test2, test3):
    if elem1 is int:
        int_list.append(elem1)
    if elem2 is int:
        int_list.append(elem2)
    if elem3 is int:
        int_list.append(elem3)

無論如何,我可以將if語句合並為一個條件語句嗎? 還是減少代碼量? 有沒有更Python的方式來做到這一點? 我嘗試執行以下代碼,但其中將包含不是整數的元素:

for elem1, elem2, elem3 in zip(test1, test2, test3):
        if (elem1 is int, elem2 is int, elem3 is int):
            int_list.append(elem1)
            int_list.append(elem2)
            int_list.append(elem3)

您的代碼存在一些問題

  1. zip構造元素的元組, 只要所有列表都具有elements ,如果列表之一用盡,則zip停止;
  2. elem1 is int 不會進行類型檢查的 ,它會引用相等性檢查 ,可以為此使用isinstance(..)
  3. 正如@Jean-FrançoisFabre所說, if (...)始終成功,因為您使用具有一個或多個元素的元組對其進行了測試:無論該元組的值是什么, 真實性都是True

為什么不先加入他們呢? 例如,您可以使用列表的元組,例如:

for sublist in (test1,test2,test3):
    for x in sublist:
        if isinstance(x,int):
            int_list.append(x)

或者您可以使用列表理解:

int_list = [x for sublist in (test1,test2,test3)
              for x in sublist if isinstance(x,int)]

您使用zip ,但需要itertools.chain() 另外, 您應該使用isinstance檢查類成員

from itertools import chain

for elem in chain(test1, test2, test3):
    if isinstance(elem, int):
        int_list.append(elem)

暫無
暫無

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

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