我有兩個字符串:Python來篩選另一個CSV列表中的逗號分隔的列表
s1 = "Brendon, Melissa, Jason, , McGuirk" #the gauranteed string in format "x, y, z"
s2 = "brandon,melissa,jxz ,paula,coach" #the messy string
,並希望創建一個使用值L1如果存在一個Python(2.7)名單,否則通通過l2中的值。我有工作代碼,但即使列表理解,我覺得可能會有更多的Pythonic這樣做。任何想法可能是什麼?
l1 = [x.strip() for x in s1.split(',')]
l2 = [x.strip() for x in s2.split(',')]
f = lambda s: s[1] if s[1] else s[0]
final = [f(x) for x in zip(l2, l1)]
列表 「最終」 現在包含:
['Brendon', 'Melissa', 'Jason', 'paula', 'McGuirk']
這是正確的。
-------編輯 因此,在下面Jon的答案中,a或b看起來似乎是最簡單,最可讀的方法。我把字符串清理移到了一個小函數中,並且以此結束。任何進一步的改進?
trim_csv = lambda csv: [s.strip() for s in csv.split(',')]
print [a or b for a, b in zip(trim_csv(s1), trim_csv(s2))]
什麼,如果有遺漏的S1和S2值?我在這篇文章中看到的兩個答案返回一個長度爲4的列表(即他們放棄它)。 – Spacedman
@Spacedman他們不放棄它 - 他們保留元素作爲'''' –
如果逗號之間沒有空格 - 可能是因爲你分割了「逗號空間」 – Spacedman