簡體   English   中英

比較兩個不同列表中的不同元素

[英]Compare different elements in two different lists

我需要比較兩個不同的數據是否匹配不同的列表。

我有這兩個清單,我需要用來計算嬰兒的數量:

first_name_baby = S AND age_baby = 1 
age_baby = [ 2, 1, 3, 1, 4, 2, 4, 1, 1, 3, 4, 2, 2, 3].  first_name_baby= [ T, S, R, T, O, A, L, S, F, S, Z, U, S, P]

first_name_baby = S AND age_baby = 1時實際上有2次,但是我需要為此編寫一個Python程序。

使用zip組合相應的列表條目,然后組合.count

>>> age_baby = [ 2, 1, 3, 1, 4, 2, 4, 1, 1, 3, 4, 2, 2, 3]
>>> first_name_baby = "T, S, R, T, O, A, L, S, F, S, Z, U, S, P".split(', ')
>>> list(zip(first_name_baby, age_baby)).count(('S', 1))
2

或者,您可以使用numpy。 這將提供與您嘗試過的解決方案非常相似的解決方案:

>>> import numpy as np
>>>                                                                                                             
>>> age_baby = np.array(age_baby)                                                    
>>> first_name_baby = np.array(first_name_baby)                                      
>>>                                                                                                                 
>>> np.count_nonzero((first_name_baby == 'S') & (age_baby == 1))                                      
2

只要條件匹配,您就可以取1的總和。 使用zip同時遍歷列表:

# need to make sense of the names
T, S, R, O, A, L, F, Z, U, S, P = 'T, S, R, O, A, L, F, Z, U, S, P'.split(', ')
age_baby = [2, 1, 3, 1, 4, 2, 4, 1, 1, 3, 4, 2, 2, 3]
first_name_baby = [T, S, R, T, O, A, L, S, F, S, Z, U, S, P]


sum(1 for age, name in zip(age_baby, first_name_baby) 
    if age == 1 and name == S)

多虧奧斯丁 ,這才是更優雅的版本:

sum(age == 1 and name == S for age, name in zip(age_baby, first_name_baby))

之所以有效,是因為python中的__str__int子類, True基本上是1 (重載__str____repr__ ), False0 ; 因此,布爾值可以被求和,結果是True比較的次數。

嘗試這個:

>>> count = 0
>>> 
>>> 
>>> for i in range(len(first_name_baby)):
...   if first_name_baby[i] == 'S' and age_baby[i] == 1:
...     count += 1
... 
>>> count
2
x = len([item for idx, item in enumerate(age_baby) if item == 1 and first_name_baby[idx] == 'S'])
 2 

展開:

l = []
for idx, item in enumerate(age_baby):
    if item == 1 and first_name_baby[idx] == 'S':
        l.append(item)
x = len(l)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM