[英]How do you compare number intervals, written as strings, in Python?
對於我正在處理的這個數據文件,我得到了成對的列表,其中每個元素代表一個年齡間隔,但它們被寫為字符串。 例如,
List1 = ['0-9', '10-19', '20-29', '30-39', '40-49', '50-']
List2 = ['0-19', '20-39', '40-']
List1 用作模板來表示相應數據的年齡間隔:
A1 = [30, 40, 50, 60, 70, 80]
B1 = [33, 20, 40, 76, 777, 844]
因此,例如,A1 的第二個元素表示年齡區間“10-19”的值是 40,B1 的第五個元素表示區間“40-49”的值是 777。
由於 List1 中的時間間隔與 List2 匹配,因此可以對 A1 和 B1 中的元素求和,以便它們現在代表 List2 的時間間隔。
A2 = [70, 110, 150]
B2 = [53, 116, 1621]
因此,現在,例如,A2 的第二個元素(以前的 A1)表示年齡區間“20-39”的值 110,而 B2(以前的 B2)的第一個元素表示區間“0-19”的值 53。
List1 的數據已重新組合以匹配 List2 的年齡間隔。 由於年齡間隔重疊,這是可能的。 對於代表以下兩個年齡間隔的數據,不能這樣做:
List3 = ['0-14', '15-29', '30-44', '45-']
List4 = ['0-19', '20-39', '40-']
由於數據的格式,我不知道如何檢查兩個列表是否具有重疊的年齡間隔,這允許重新組合數據以表示一組新的年齡間隔。 如果有人可以向我指出 python 中可用的方法或庫,它能夠使這樣的任務成為可能,特別是處理表示為字符串的數字間隔,我將不勝感激。 謝謝你。
我們可以使用split
方法從'0-9'
到('0', '19')
。 將此方法應用於所有對可能如下所示:
list1 = [s.split('-') for s in list1]
list2 = [s.split('-') for s in list2]
現在我們需要遍歷list1
以兩兩合並對。 我使用了zip
功能來做到這一點。
merge = [[pair[0][0], pair[1][1]] for pair in list(zip(list1,list1[1:]))[::2]]
然后我們只需要將我們的新merge
列表與list2
進行比較。
merge == list2
一切都在一起:
def foo(list1, list2):
list1 = [s.split('-') for s in list1]
list2 = [s.split('-') for s in list2]
merge = [[pair[0][0], pair[1][1]] for pair in list(zip(list1,list1[1:]))[::2]]
return merge == list2
print(foo(List1, List2)) # True
print(foo(List3, List4)) # False
您可以在一組中整理出所有較年輕的年齡,在另一組中整理出所有較大的年齡。 然后查看較短列表中的所有較大年齡是否存在於較長列表中的 old 中,並且對於較年輕的列表是否相同。 這樣,它不僅可以匹配對,還可以匹配單個、對、三元組等的任意組合。
def can_represent(short_list, long_list):
youngs_1 = {s.split('-')[0] for s in short_list}
youngs_2 = {s.split('-')[0] for s in long_list}
olds_1 = {s.split('-')[1] for s in short_list}
olds_2 = {s.split('-')[1] for s in long_list}
return not youngs_1 - youngs_2 and not olds_1 - olds_2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.