2017-01-22 66 views
-2

,如果我有兩個列表 一個名爲「基地」和用於擊穿另一個列表 另一個是「匹配」 像下面如何比較兩個列表,算另一個列表的對象之間的一個列表的數量

base = [4,7,13,14,19] 
match = [1,2,5,9,10,12,15,18] 

我想統計在「base」的兩個對象內有多少個「匹配」數字,並存儲在另一個名爲「result」的列表中 因此,「result」應該是[1,3,0,2]

我用這種方式

fianl_num = [] 
m = 0 
countnum = 0 
for j in match: 
    if j < base[m]: 
     countnum += 1 
    else: 
     m = m+1 
     fianl_num.append(countnum) 
     countnum = 0 
print(fianl_num)`  

但是,如果匹配的對象比base的對象大,則當前匹配的對象將被視爲else,並繼續將下一個匹配的對象與下一個基礎對象進行比較。因此,當前基地的目標是跳過

對於我的示例/ base = [4,7,13,14,19]/match = [1,2,5,9,10,12,15,18 ] 我的代碼結果爲[2,0,2,0] 因爲5大於4,所以它繼續比較9到7,跳過比較5到7的過程

+4

對於'base''的兩個對象中的*有什麼意思? –

+1

沒有得到你是如何得到1,3,0,2在第一種情況下 –

+1

更具體地說,你能解釋結果如何等於[1,3,0,2]?也許,你可以一步一步寫下來。 –

回答

0

可以有更好的方法這個。但是,1路可以是這樣的:

base = [4,7,13,14,19] 
match = [1,2,5,9,10,12,15,18] 
l = [] 
i = 0 
while i < len(base)-1: 
    count = 0 
    for a in match: 
     if base[i] < a < base[i+1]: 
      count += 1 
    l.append(count) 
    i += 1 
print l 

輸出:

[1, 3, 0, 2] 
+0

誰在downvoting? :D請慷慨提及原因以及:) – MYGz

0

這個怎麼樣?

base = [4,7,13,14,19] 
match = [1,2,5,9,10,12,15,18] 

fianl_num = [] 
m = 0 
len = len(match) 
countnum = 0 
for j in base: 
    while m < len and match[m] < j: 
     m = m+1 
     countnum += 1 
    if j > base[0]: 
     fianl_num.append(countnum) 
    countnum = 0 
print(fianl_num) 

#[1, 3, 0, 2] 
1

使用sum(),以確定在basematchi+1之間i元件的元件的數量。

for i in range(len(base)-1): 
    count=sum(base[i]<x<base[i+1]for x in match) 
    l.append(count) 

輸出:

[1,3,0,2] 
0

我覺得一個線列表理解是很容易,問題描述來了解:

base = [4,7,13,14,19] 
match = [1,2,5,9,10,12,15,18] 

[sum(1 for e in match if lower < e < upper) for lower, upper in zip(base, base[1:])] 

Out[7]: [1, 3, 0, 2] 

可如果你是OK的幾個字符短在Trelzevir的回答中,bools的總和(True = 1,False = 0

[sum(lower < e < upper for e in match) for lower, upper in zip(base, base[1:])] 

舊的python版本可能需要額外的支撐才能將sum的arg識別爲生成器