我生成的列表中只包含'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]
代码是什么?
答案 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