我在其中生成列表,只有「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]
代碼是什麼?
我在其中生成列表,只有「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]
代碼是什麼?
使用按位或|
和使用zip
功能:
>>> [x | y for x,y in zip(list_1, list_2)]
[1, 0, 1, 1, 1, 0]
如果列表中不具有相同的長度,使用zip_longest
從itertools
模塊:
>>> 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]
這裏是你如何可以創建你的第三個列表:
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'
第一個解決方案起作用。我不確定第二種解決方案如何接收序列,因爲我正在使用不同的例程來填充列表。 –
您正在尋找的是按位或運算。如果任何一個輸入位爲1,則兩位的OR將爲1;如果兩者都爲0,則兩位的OR將爲1.
有多種方法可以在列表中對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
最初,列表的長度是相同的,但最終他們不會。我認爲編碼時間最長(如果len(ls_1)> len(ls_2)...)就是解決方案。 –
你有什麼已經嘗試過?請顯示您的代碼並解釋哪些不適合您。 – idjaw
我想過使用for循環來查看這兩個列表中的項目。如果兩個列表都有'1',那麼附加'1'else'0',但我不確定循環代碼:對於ex:對於list_1中的項目和list_2中的項目:....但這會導致錯誤! –