簡體   English   中英

遍歷兩個2D列表以創建匹配項的2D列表

[英]Iterate through two 2D lists to create a 2D list of matched occurrences

我一直在努力尋找解決方案,但無法解決任何問題! 我敢肯定,有一種簡單的方法可以做我不知道的事情。

我有兩個2D列表, ab (下面的示例)。 您可以看到,對於大多數值,每個A列表中的位置[1]都與B列表中的位置[0]匹配(例如,列表a 3中的5158648.0與列表b 3中的5158648.0相匹配)-我已經將匹配項在下面的列表中以粗體顯示

換句話說,B是一個有點長的序列,而A在相同的序列中,但是只具有某些B值。

A = [[1000002.0,0],[1000004.0,1000002.0],[5158670.0,5158648.0],[5158261.0,5159627.0],[5155371.0,5158256.0],[5258673.0,5158648.0]]

b = [[1000004.0,'TF'],[1000005.0,'TF'],[ 5158648.0 ,'FT'],[5158670.0,'FT'],[5387625.0,'FT'],[5158624.0,'FT'] ,[5158623.0,'FT'],[5158668.0,'FT'],[5158589.0,'FT'],[5158641.0,'FT'],[5158640.0,'FT'],[ 5159627 .0,'FT'] ,[5158261.0,'FT'],[5158664.0,'TF'],[5158293.0,'TF'],[5158291.0,'TF'],[5158289.0,'TF'],[5158274.0,'TF'],[ 5158258.0,'TF'],[5158272.0,'TF'],[5158270.0,'TF'],[5158287.0,'TF'],[ 5158256.0 ,'TF'],[ 5155158.0 ,'TF']]

我要做的是將'TF / FT'從B跨到A的正確位置

有了字典,這將非常容易,但是復雜的是一個值(例如5158648.0) 可能在序列中的兩個位置 (“ FT”在某個點,然后“ TF”在更下方) 都具有兩個值 ...所以,我需要說“ 在序列中的這個位置上它具有'FT',但在序列中的另一個位置上它具有' TF'-請參見上面的示例,其中5158648.0既是FT又是TF。

有誰知道實現此目標的最佳方法? 所需的最終產品如下:

c = [[1000002.0,0,'N / A'],[1000004.0,1000002.0,'N / A'],[ 5158670.0,5158648.0 ,' FT '],[ 5158261.0,5159627.0 ,' FT '],[5155371.0, 5158256.0 ,' TF '],[ 5258673.0,5158648.0 ,'TF']]

注意,某些值(此處為“ 0”和“ 1000002.0”)根本沒有出現在b中,因此我需要考慮這些值。

我嘗試將列表移到這樣的階段,即我擁有2個長度相同的匹配值列表,然后使用zip()遍歷這些值,但是棘手的一點是將列表縮小以得到這2個相同的列表,特別是在2D方面。

謝謝 !


ps,以防上下文有所幫助-每個數字都是街道ID,而'FT'/'TF'是行進方向(因此,它可能是一個值還是另一個值-取決於行進的方式)

我希望我了解您正在嘗試做什么。 據我了解,“ a”確定順序,而“ b”中唯一重要的順序是相同值的“ ft”和“ tf”值之間。 因此,我將使用字典,並按順序列出可用值(在您的問題中,您暗示您將控制'b'的樣子):

b = {[1000004.0: ['TF'], [1000005.0: ['TF'], 158648.0: ['FT','TF'], 
      158670.0: ['FT'], 387625.0: ['FT'], 158624.0: ['FT'], 158623.0: ['FT'], 
      158668.0: ['FT'], 158589.0: ['FT'], 158641.0: ['FT'], 158640.0: ['FT'], 
      159627.0: ['FT'], 158261.0: ['FT'], 158664.0: ['TF'], 158293.0: ['TF'], 
      158291.0: ['TF'], 158289.0: ['TF'], 158274.0: ['TF'], 158258.0: ['TF'], 
      158272.0: ['TF'], 158270.0: ['TF'], 158287.0: ['TF'], 158256.0: ['TF']}

然后,您只需要:

for x,y in a:
    try:
       c.append((x,y,b[y][0]))
       b[y].pop(0)
    except (IndexError,KeyError):
       c.append((x,y,'NA'))

暫無
暫無

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

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