Python | 檢查兩個列表中是否至少有一個共同元素
在編程領(lǐng)域,檢查兩個列表中是否至少存在一個共同元素是常見的需求。以下是幾種實現(xiàn)方法:
方法1:遍歷列表,復(fù)雜度為O(n*m),空間復(fù)雜度為O(1)。
方法2:利用集合的and屬性,復(fù)雜度為O(m+n),空間復(fù)雜度為O(m+n)。
方法3:通過集合交集函數(shù),復(fù)雜度為O(n),空間復(fù)雜度為O(n),n為列表較大者。
方法4:應(yīng)用collections模塊中的Counter類,復(fù)雜度為O(n+m),空間復(fù)雜度為O(k),k為唯一元素個數(shù)。
方法5:采用operator.countOf()方法,復(fù)雜度為O(n),空間復(fù)雜度為O(1)。
方法6:結(jié)合any()和列表解析,復(fù)雜度為O(n*m),空間復(fù)雜度為O(1)。
這些方法各有優(yōu)劣,根據(jù)具體場景和需求選擇最適合的實現(xiàn)方式。使用集合或Counter類通常在處理大量數(shù)據(jù)時更為高效,而直接遍歷則在數(shù)據(jù)量較小或內(nèi)存限制嚴(yán)格的場景下表現(xiàn)更好。
漢詩13470872252: 怎么用戶python找表之間的規(guī)律 -
達(dá)日縣節(jié)距: ______ 最近剛接觸python,找點小任務(wù)來練練手,希望自己在實踐中不斷的鍛煉自己解決問題的能力.公司里會有這樣的場景:有一張電子表格的內(nèi)容由兩三個部門或者更多的部門用到,這些員工會在維護(hù)這些表格中不定期的跟新一些自己部門的數(shù)據(jù)...
漢詩13470872252: python 中兩個list是否有相同元素的辦法 -
達(dá)日縣節(jié)距: ______ # coding:UTF-8 list1=[1,2,3,4,5] list2=[5,6,7,8,9] t=False for i in list1: if i in list2: print(i) t=True break print(t)# 這是容易想到的方法,可以將它轉(zhuǎn)為函數(shù)
漢詩13470872252: python 怎樣判斷一個序列是否在另一個序列中 -
達(dá)日縣節(jié)距: ______ 你的需求描述的不是太清晰,如果你時想判斷 list1 = [2, 3, 3, 4],是否為 list2 = [1, 2, 3, 3, 4, 5] 的子序列,首先保證兩個列表元素類型相同,然后寫循環(huán):list1 = [2, 3, 3, 4] list2 = [1, 2, 3, 3, 4, 5] flag = False for i in range(len(list2) - len(list1) + 1): if list2[i: i+len(list1)] == list1: flag = True break print(flag)
漢詩13470872252: 如何用python從excel中同時提取兩個列的數(shù)據(jù),并生成dict(用xlrd) -
達(dá)日縣節(jié)距: ______ import xlrd data = xlrd.open_workbook('excelFile.xls') table = data.sheet_by_index(0) #通過索引順序獲取工作表 colnumber_b = ord('B')-ord('A') colnumber_g = ord('G')-ord('A') score_dict = {} for i in range(100): #前一百行 score_dict[table.cell(i,colnumber_b).value]=table.cell(i,colnumber_g).value
漢詩13470872252: 用python處理兩個列表 list1=[1,2,3,4] list2=[a,b,c,d] 變成list3 = [[1,a],[2,b],[3,c],[3,d]] -
達(dá)日縣節(jié)距: ______ >>> l1 = [1, 2, 3, 4] >>> l2 = ['a', 'b', 'c', 'd'] >>> [[x, y] for i, x in enumerate(l1) for y in l2[i]] [[1, 'a'], [2, 'b'], [3, 'c'], [4, 'd']] >>> 這種 必須 len(l1) == len(l2)
漢詩13470872252: python語句中合并兩個列表并且將列表中的數(shù)安大小排列 -
達(dá)日縣節(jié)距: ______ 假設(shè)原來的兩個list是L1,L2. 1,合并:L = L1+L2 2,排序sorted(L) 默認(rèn)從小到大排列,如果要從大到小排列就是sorted(L,reverse=True) 合起來就是 L=sorted(L1+L2, reverse=True)
漢詩13470872252: python中兩個list該如何排序 -
達(dá)日縣節(jié)距: ______ data=[(score, name) for score, name in zip(list1,list2)] #先轉(zhuǎn)化成元組 data.sort() #按照分?jǐn)?shù)排序 list1=[score for score,name in data] #將排好序的分?jǐn)?shù)姓名的元組分開 list2=[name for score,name in data] 這么簡單,不需要樓上寫的那么復(fù)雜
漢詩13470872252: python 判斷列表中每個元素有幾個 -
達(dá)日縣節(jié)距: ______ 比如你可以這樣(用isinstance()函數(shù)來判斷類型): 123456789intCount = 0 #用來記錄列表中的int元素個數(shù)listCount = 0 #記錄list元素個數(shù)a = [1,'a',2,[1,2]]for i in a: #遍歷a if isinstance(i,int): #判斷i是不是int intCount += 1 elif isinstance(i,list...
漢詩13470872252: 如何統(tǒng)計pythonlist中元素的個數(shù)及其位置
達(dá)日縣節(jié)距: ______ 1.首先,統(tǒng)計個數(shù)要用到collections模塊的Counter類.... 2.Counter對象有多種用法,可以直接顯示各個元素頻次,也可以使用most_... 3.前面的例子統(tǒng)計的是字符串,實際上還可以統(tǒng)計列表,只要列表里邊的對象都是可以哈希的. 4.如果列表里邊有unhashable的對象,列表中有一個可變的列表對象,... 5.如果列表是若干元組的集合,這些元組都是可哈希的不可變對象,因此是可以統(tǒng)計的.
漢詩13470872252: python中如何去兩個文件的并集 -
達(dá)日縣節(jié)距: ______ 有時候,為了需求,需要統(tǒng)計兩個 list 之間的交集,并集,差集.查詢了一些資料,現(xiàn)在總結(jié)在下面: 1. 獲取兩個list 的交集 #方法一: a=[2,3,4,5] b=[2,5,8] tmp = [val for val in a if val in b] print tmp #[2, 5] #方法二 print list(set(a).intersection(...
方法1:遍歷列表,復(fù)雜度為O(n*m),空間復(fù)雜度為O(1)。
方法2:利用集合的and屬性,復(fù)雜度為O(m+n),空間復(fù)雜度為O(m+n)。
方法3:通過集合交集函數(shù),復(fù)雜度為O(n),空間復(fù)雜度為O(n),n為列表較大者。
方法4:應(yīng)用collections模塊中的Counter類,復(fù)雜度為O(n+m),空間復(fù)雜度為O(k),k為唯一元素個數(shù)。
方法5:采用operator.countOf()方法,復(fù)雜度為O(n),空間復(fù)雜度為O(1)。
方法6:結(jié)合any()和列表解析,復(fù)雜度為O(n*m),空間復(fù)雜度為O(1)。
這些方法各有優(yōu)劣,根據(jù)具體場景和需求選擇最適合的實現(xiàn)方式。使用集合或Counter類通常在處理大量數(shù)據(jù)時更為高效,而直接遍歷則在數(shù)據(jù)量較小或內(nèi)存限制嚴(yán)格的場景下表現(xiàn)更好。
相關(guān)評說:
達(dá)日縣節(jié)距: ______ 最近剛接觸python,找點小任務(wù)來練練手,希望自己在實踐中不斷的鍛煉自己解決問題的能力.公司里會有這樣的場景:有一張電子表格的內(nèi)容由兩三個部門或者更多的部門用到,這些員工會在維護(hù)這些表格中不定期的跟新一些自己部門的數(shù)據(jù)...
達(dá)日縣節(jié)距: ______ # coding:UTF-8 list1=[1,2,3,4,5] list2=[5,6,7,8,9] t=False for i in list1: if i in list2: print(i) t=True break print(t)# 這是容易想到的方法,可以將它轉(zhuǎn)為函數(shù)
達(dá)日縣節(jié)距: ______ 你的需求描述的不是太清晰,如果你時想判斷 list1 = [2, 3, 3, 4],是否為 list2 = [1, 2, 3, 3, 4, 5] 的子序列,首先保證兩個列表元素類型相同,然后寫循環(huán):list1 = [2, 3, 3, 4] list2 = [1, 2, 3, 3, 4, 5] flag = False for i in range(len(list2) - len(list1) + 1): if list2[i: i+len(list1)] == list1: flag = True break print(flag)
達(dá)日縣節(jié)距: ______ import xlrd data = xlrd.open_workbook('excelFile.xls') table = data.sheet_by_index(0) #通過索引順序獲取工作表 colnumber_b = ord('B')-ord('A') colnumber_g = ord('G')-ord('A') score_dict = {} for i in range(100): #前一百行 score_dict[table.cell(i,colnumber_b).value]=table.cell(i,colnumber_g).value
達(dá)日縣節(jié)距: ______ >>> l1 = [1, 2, 3, 4] >>> l2 = ['a', 'b', 'c', 'd'] >>> [[x, y] for i, x in enumerate(l1) for y in l2[i]] [[1, 'a'], [2, 'b'], [3, 'c'], [4, 'd']] >>> 這種 必須 len(l1) == len(l2)
達(dá)日縣節(jié)距: ______ 假設(shè)原來的兩個list是L1,L2. 1,合并:L = L1+L2 2,排序sorted(L) 默認(rèn)從小到大排列,如果要從大到小排列就是sorted(L,reverse=True) 合起來就是 L=sorted(L1+L2, reverse=True)
達(dá)日縣節(jié)距: ______ data=[(score, name) for score, name in zip(list1,list2)] #先轉(zhuǎn)化成元組 data.sort() #按照分?jǐn)?shù)排序 list1=[score for score,name in data] #將排好序的分?jǐn)?shù)姓名的元組分開 list2=[name for score,name in data] 這么簡單,不需要樓上寫的那么復(fù)雜
達(dá)日縣節(jié)距: ______ 比如你可以這樣(用isinstance()函數(shù)來判斷類型): 123456789intCount = 0 #用來記錄列表中的int元素個數(shù)listCount = 0 #記錄list元素個數(shù)a = [1,'a',2,[1,2]]for i in a: #遍歷a if isinstance(i,int): #判斷i是不是int intCount += 1 elif isinstance(i,list...
達(dá)日縣節(jié)距: ______ 1.首先,統(tǒng)計個數(shù)要用到collections模塊的Counter類.... 2.Counter對象有多種用法,可以直接顯示各個元素頻次,也可以使用most_... 3.前面的例子統(tǒng)計的是字符串,實際上還可以統(tǒng)計列表,只要列表里邊的對象都是可以哈希的. 4.如果列表里邊有unhashable的對象,列表中有一個可變的列表對象,... 5.如果列表是若干元組的集合,這些元組都是可哈希的不可變對象,因此是可以統(tǒng)計的.
達(dá)日縣節(jié)距: ______ 有時候,為了需求,需要統(tǒng)計兩個 list 之間的交集,并集,差集.查詢了一些資料,現(xiàn)在總結(jié)在下面: 1. 獲取兩個list 的交集 #方法一: a=[2,3,4,5] b=[2,5,8] tmp = [val for val in a if val in b] print tmp #[2, 5] #方法二 print list(set(a).intersection(...