2016-01-05 90 views
-3

我想使用給定模式在兩個列表中更改相同的元素。列表的元素是像'xxx.yyy...'這樣的字符串。所以有效的元素例如'aa', 'aa.1.2', '2.1.1'在Python中比較和更改列表

實施例:

list_1 = ['24' '1.1' '1.2' '2.13' '1.4'] 
list_2 = ['aa' 'bb' '1.1' '1.2' '1.3' '1.4' '1.5' '1.6' '24'] 

因此,在這種情況下,元素:

'1.1', '1.2', '1.4', '24' 

從列表中的一個是在兩個列出了常見的,並已以等來改變:

'1.7', '1.8', '1.9', '25' 

所以根源被保留,只有最後一部分被改變。 我可以找到,如果相同的元素存在,如:

for elem in list_1: 
    if elem in list_2: 

但如何發生相應的變化呢?

+2

「相應地改變」到什麼?我沒有看到這種變化的模式。 – TigerhawkT3

+0

必須使用最後的下一個可用整數。所以'1.1'必須用'1.7','24'和'25'等替代。 – Drago

+0

請發佈預期的輸出。您的數據集是否會更改或增大?根據要求,解決方案可能會有所不同。 –

回答

0

使用我的水晶球,我確定你想這樣的事情:

def get_new_name(item): 
    *head, tail = item.split(".") 
    tail=int(tail) 
    head = ".".join(head) 
    while True: 
     tail += 1 
     yield head +"." + str(tail) if head else str(tail) 
for idx, item in list1: 
    if item in list2: 
     for new in get_new_name(item): 
      if new not in list2 and new not in list1: 
       list1[idx] = new 
       break 

花哨的說法拆包只會工作,在最新版本的Python(3),但很容易使用其他方法來複制。

0

也許你想要創建一個新的列表並附加那些不在兩個列表中都沒有改變的元素,並附加兩個列表中被更改的列表中的元素。

list_3 = [] 
converter = {'1.1':'1.7', '1.2':'1.8', '1.4':'1.9', '24':'25'} 
for elem in list_1: 
    if elem in list_2: 
     list_3.append(converter[elem]) 
    else: 
     list_3.append(elem) 

但是,這是瘋狂的猜測(和代碼是「不漂亮」),因爲你的問題不完全清楚。