У меня есть две строки:Python для фильтрации через запятую список в другой список CSV
s1 = "Brendon, Melissa, Jason, , McGuirk" #the gauranteed string in format "x, y, z"
s2 = "brandon,melissa,jxz ,paula,coach" #the messy string
и хотел бы создать список Python (2.7), который использует значение в l1, если он существует, в противном случае переходите через значение в 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']
Который является правильным.
------- редактировать Итак, глядя на ответ Джона ниже, 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