我有一個這樣的名單:通過檢查的一部分列表中的替換項
[item1(130.35),item2(140.10),item2(140.25),item2(130.05)]
我想通過檢查其號碼的第一個數字來代替的東西從另一個列表中不同的每個項目。 例如所有130S replaceditem1,所有140S replaceditem2:
[replaceditem1,replaceditem2,replaceditem2,replaceditem1]
我有一個這樣的名單:通過檢查的一部分列表中的替換項
[item1(130.35),item2(140.10),item2(140.25),item2(130.05)]
我想通過檢查其號碼的第一個數字來代替的東西從另一個列表中不同的每個項目。 例如所有130S replaceditem1,所有140S replaceditem2:
[replaceditem1,replaceditem2,replaceditem2,replaceditem1]
的想法是:
item\d+\((\d+)\.\d+\)
將工作這組輸入演示:
>>> l = ["item1(130.35)", "item2(140.10)", "item2(140.25)", "item2(130.05)"]
>>> import re
>>> pattern = re.compile(r"item\d+\((\d+)\.\d+\)")
>>> replacements = {
... '130': 'replaceditem1',
... '140': 'replaceditem2'
... }
>>> result = []
>>> for item in l:
... match = pattern.match(item)
... if match:
... result.append(replacements.get(match.group(1), item))
... else:
... result.append(item)
>>> result
['replaceditem1', 'replaceditem2', 'replaceditem2', 'replaceditem1']
讓我們在正則表達式:
\d+
匹配一個或更多連續數字\(
and \)
would matc^h字面打開和關閉括號 - 需要轉義,因爲他們有特殊的意義\.
將匹配一個點(\d+)
是捕獲組將捕獲一個或多個連續數字在item1(130.35)是函數調用而不是字符串的情況下呢? –
顯然,OP剛剛選擇了你的答案,所以我上面的評論是無關緊要的。 +1 –
@leaf是的,我認爲OP有這些項目作爲字符串,看起來像假設是正確的。謝謝。 – alecxe
這是不是很清楚你想要什麼,但也許'[replaceitem1 if i == 130 else replaceditem2 if i == 140 else i for i in lst]'? –
創建新的空列表,並使用for-loop從舊列表中獲取每個元素,並檢查它是否具有「130」或「140」,然後添加到新列表「replaiteitem1」或「replaceditem2」 – furas
什麼是實際列表的樣子?是'item1(130.35)'調用'item1()'還是像''item1(130.35)「'這樣的字符串? – ernie