2017-01-26 24 views
0

我有以下3 Python列表:Python的替換列表中的元素在2所列出,在子的指數在第三列表

cl_ambient = ['BRy', 'WilmB', 'Hgan', 'FoVx', 'Afree', 'FoVx_d', 'Afree_d'] 
temp_farh = ['grey', 'DarkOrange', 'r', 'black', 'black', 'black', 'black'] 
manual_calib = ['white', 'white', 'white', 'blue', 'yellow', 'green', 'darkgreen'] 

所有3只列出將始終具有相同的長度。

開始與列表cl_ambient

我需要找到元素的索引中cl_ambient這是另一個元素的子字符串。在這種情況下,這些元素的索引在索引3,5(Fovx,Fovx_d)和4,6(Afree,Afree_d)。

現在,一旦這些指標被發現,我需要同時在其他2列出了使用這些指標進行更換:

我需要從其他2所列出更換更高的索引元素(temp_farhmanual_calib)與來自manual_calib列表的較低索引元素 。所以,如果我們手動做到這一點,替代品應該是:

temp_farh[5] = temp_farh[3] 
temp_farh[6] = temp_farh[4] 

manual_calib[5] = temp_farh[3] 
manual_calib[6] = temp_farh[4] 

我需要以編程方式使這些替代品。由於列表可能會很長,我無法手動執行此操作。

所需的輸出:

輸出應該是:

cl_ambient = ['BRy', 'WilmB', 'Hgan', 'FoVx', 'Afree', 'FoVx_d', 'Afree_d'] 
temp_farh = ['grey', 'DarkOrange', 'r', 'black', 'black', 'blue', 'yellow'] 
manual_calib = ['white', 'white', 'white', 'blue', 'yellow', 'blue', 'yellow'] 

問:

有沒有辦法從這些3只列出了編程提取這些串元素呢?

附加信息:

  1. 按照下面的評論,我會補充一點:不會有多於2子存在於cl_ambient列表中的場景。例如:FoVx,FoVx_d,FoVx_a將不存在。將只有Fovx_dFovx_a
  2. 子字符串將始終在cl_ambient列表中的較長元素之前。
+0

如果'cl_ambient'中有多於2個子字符串會怎麼樣。例如:'FoVx'' FoVx_d'' FoVx_a'然後會發生什麼? – MooingRawr

+0

感謝您的注意。這種情況在'cl_ambient'列表中是不可能的。我會把這個添加到OP,很好的問題。 –

+0

子字符串是否總是在較長的元素之前? –

回答

2

答案是分裂成兩個部分,第一個找到我們想要更換,然後進行期望的索引替換

代碼:

cl_ambient = ['BRy', 'WilmB', 'Hgan', 'FoVx', 'Afree', 'FoVx_d', 'Afree_d'] 
temp_farh = ['grey', 'DarkOrange', 'r', 'black', 'black', 'black', 'black'] 
manual_calib = ['white', 'white', 'white', 'blue', 'yellow', 'green', 'darkgreen'] 


# for each index search match on the higher indexes, 
# if found save it on the changes list as (high, low) tuple 
changes = [(i+1+j, i) for i, s1 in enumerate(cl_ambient) 
      for j, s2 in enumerate(cl_ambient[i+1:]) 
      if (s1 in s2 or s2 in s1)] 
print(changes) 

# do the change on both lists 
for i, j in changes: 
    temp_farh[i] = manual_calib[j] 
    manual_calib[i] = manual_calib[j] 

print(temp_farh) 
print(manual_calib) 

輸出:

[(5, 3), (6, 4)] 
['grey', 'DarkOrange', 'r', 'black', 'black', 'blue', 'yellow'] 
['white', 'white', 'white', 'blue', 'yellow', 'blue', 'yellow'] 
+0

謝謝。你的'manual_calib'很好。但是,對於'temp_farh'列表,我需要最後2個元素爲'blue','yellow'。 –

+1

哦,等一下。對不起,如果你只是做一個改變,它會起作用將'for'循環中的第一行更改爲:'temp_farh [i] = manual_calib [j]' –

+0

謝謝將其更改爲 – ShmulikA

相關問題