我有两个字符串:
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))]