2017-08-18 26 views
1

我的例子(列表A和B都是一樣大小):Python 3.6 - 是否有一個條件,可以表現得不然?

a = ['12','12','12','12','12','23','24','24','31','31'] 
b = ['1','2','2','2','2','2','5','5','5','5'] 
c = a, b 

這裏是我的代碼需要像否則情況下,C [0]是,以便代碼只查看通過列表而不是同時列出並打印出符合條件的列表a和b的結果。 此代碼中的其他條件是錯誤的,我想不出一個替代的:

d = list(zip(*[(ai,bi) for ai, bi in zip(a,b) if c[0].count(ai) == 5 else 2])) 

e = list(zip(*[(ai,bi) for ai, bi in zip(a,b) if c[0].count(ai) == 7 else 2])) 

是否有可能改變的條件,使其打印的5只計數如果在我的例子中超過2個字?或者,如果7是初始計數,但是沒有檢測到,則它僅打印2的計數值?

我想要的結果:

d = [('12','12','12','12','12',), ('1','2','2','2','2')] 

e = [('24','24','31','31'), ('5','5','5','5')] 

謝謝!

+0

爲什麼'C [0] .Count之間(...)'當你只是可以做'a.count(...)'? –

+0

另請注意,反覆調用count()會很貴*。首先創建一個「Counter()」,然後使用該對象。 –

+0

嗨,我的意思是,代碼將查看列表a並計數是否有5個重複數字。如果有的話,它會打印出5個數字。在另一種情況下,我想看看是否有7個重複數字。如果有,那麼它將打印出7個數字,但如果沒有7個,那麼它將只打印2個數字的數字。 –

回答

3

您需要先計算您的元素第一個,然後決定選擇哪個。使用collections.Counter() object有效計數的元素,這樣的話你就可以決定哪些元素被拾起:

from collections import Counter 

counts = Counter(a) 
has_5 = any(c == 5 for c in counts.values()) 
has_7 = any(c == 7 for c in counts.values()) 

現在,你知道,如果有出現5次,和元素,如果有出現7次的元素。您現在可以通過顯示多少次來過濾這些元素,而無需重新計算每次迭代。讓你挑第一,所以您不必到if邏輯複雜:

desired_count = 5 if has_5 else 2 
d = list(zip(*[(ai,bi) for ai, bi in zip(a,b) if counts[ai] == desired_count])) 

desired_count = 7 if has_7 else 2 
e = list(zip(*[(ai,bi) for ai, bi in zip(a,b) if counts[ai] == desired_count])) 

所以如果有出現5次,這些過濾器的元素,上只出現的元素,否則過濾兩次。

演示:

>>> from collections import Counter 
>>> a = ['12','12','12','12','12','23','24','24','31','31'] 
>>> b = ['1','2','2','2','2','2','5','5','5','5'] 
>>> counts = Counter(a) 
>>> has_5 = any(c == 5 for c in counts.values()) 
>>> has_7 = any(c == 7 for c in counts.values()) 
>>> desired_count = 5 if has_5 else 2 
>>> list(zip(*[(ai,bi) for ai, bi in zip(a,b) if counts[ai] == desired_count])) 
[('12', '12', '12', '12', '12'), ('1', '2', '2', '2', '2')] 
>>> desired_count = 7 if has_7 else 2 
>>> list(zip(*[(ai,bi) for ai, bi in zip(a,b) if counts[ai] == desired_count])) 
[('24', '24', '31', '31'), ('5', '5', '5', '5')] 
+0

謝謝你的幫助和解釋,這是很好的選擇! –

+0

增加了更多的條件,在else條件之前可以使用elif嗎? –

+0

@ F.Lee:否,[條件表達式](https://docs.python.org/3/reference/expressions.html#conditional-expressions)沒有'elif'選項。只需鏈接它們,或者擴展爲使用完整的'if .. elif .. else'語句。 –

相關問題