if语句条件对多个变量是互斥的吗?

2024-10-02 12:28:14 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有三个列表,希望将所有整数元素添加到名为int_list的列表中:

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

我知道可以执行以下代码将所有整数追加到新列表:

^{pr2}$

我能把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)

Tags: 代码元素列表ifis整数listint
2条回答

您的代码存在一些问题:

  1. zip构造元素的元组,只要所有列表都有元素,如果其中一个列表用尽,zip停止
  2. elem1 is int不执行类型检查,而是引用相等性检查,您可以使用isinstance(..)进行检查;并且
  3. 正如@Jean-FrançoisFabre所说,if (...)总是成功的,因为你用一个或多个元素的元组来测试它:不管这个元组的值是什么,truthinessTrue。在

为什么不先加入他们呢?例如,您可以使用列表的元组,例如:

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

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

^{pr2}$

您使用zip,但您想要^{}。另外you should use ^{} to check class membership。在

from itertools import chain

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

相关问题 更多 >

    热门问题