簡體   English   中英

你如何比較用 Python 寫成字符串的數字間隔?

[英]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.

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