将python中的列表与常用元素组合在一起

时间:2016-02-29 03:15:53

标签: python list

我生成的列表中只包含'1'和'0':

list_1 = [1,0,0,1,0,0]
list_2 = [1,0,1,0,1,0]

我正在尝试将它们组合在一起,这样如果任一列表中出现“1”,它就会显示在新列表中,并替换任何“0”

new_list = [1,0,1,1,1,0]

代码是什么?

3 个答案:

答案 0 :(得分:1)

在列表推导上使用按位或|并使用zip函数:

>>> [x | y for x,y in zip(list_1, list_2)]
[1, 0, 1, 1, 1, 0]

如果列表的长度不同,请使用itertools模块中的zip_longest

>>> l1 = [1,1,1,0,0,1]
>>> l2 = [1,0,1,1,1,0,0,0,1]
>>> 
>>> [x | y for x,y in zip_longest(l1, l2, fillvalue=0)]
[1, 1, 1, 1, 1, 1, 0, 0, 1]

另一种方法是使用starmap并在Python3中记住,这会生成一个生成器,因此您必须在此之后将其转换为list,这样:

>>> from itertools import starmap
>>> from operator import or_ #bitwise or for the function passed to starmap
>>> list(starmap(or_, zip_longest(l1,l2, fillvalue=0)))
[1, 1, 1, 1, 1, 1, 0, 0, 1]

答案 1 :(得分:0)

以下是如何创建第三个列表:

list_3 = [int(x or y) for x,y in zip(list_1, list_2)]

我觉得有一种更好的方法来实现你想要的,而不使用这些列表。您可以将列表视为二进制数字:

num_1 = int("100100", 2)
num_2 = int("101010", 2)
num_3 = num_1 | num_2  # bitwise or
print(bin(num_3))  # prints '0b101110'

答案 2 :(得分:0)

您正在寻找的是按位OR运算。如果任一输入位为1,则两位的OR将为1;如果两者都为0,则为0。

在python中通过列表有多种方法可以做到这一点,但最简单的方法就是for循环。假设列表长度相同,这将起作用:

    new_list = []
    for i in range(len(list_1)):
        new_list.append(list_1[i] | list_2[i]) # the '|' character means bitwise OR