我有两个字符串:
s1 = "Brendon, Melissa, Jason, , McGuirk" #the gauranteed string in format "x, y, z"
s2 = "brandon,melissa,jxz ,paula,coach" #the messy string
Run Code Online (Sandbox Code Playgroud)
并且想创建一个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)]
Run Code Online (Sandbox Code Playgroud)
列表"final"现在包含:
['Brendon', 'Melissa', 'Jason', 'paula', 'McGuirk']
Run Code Online (Sandbox Code Playgroud)
哪个是对的.
-------编辑所以,看看Jon的答案,a或b似乎是最简单,最易读的方法.我将字符串清理移动到一个小功能,最后得到了这个.有什么进一步的改进吗?
trim_csv = lambda csv: [s.strip() for s in csv.split(',')]
print [a or b for a, b in …Run Code Online (Sandbox Code Playgroud) 我收到了一个需要读入数据库的大量日期时间表示.我正在使用Python(因为它摇滚).字符串是一种可怕的,可怕的格式,它们不精确到秒,没有说明时区,并且小时没有前导0.因此它们看起来更像是这样的:
April 29, 2013, 7:52 p.m.
April 30, 2013, 4 p.m.
Run Code Online (Sandbox Code Playgroud)
你会注意到,如果在凌晨4点到4点01分之间发生了什么事,那么它也会缩短分数(呃).无论如何,试图用time.strptime解析这些,但是文档说小时必须是十进制数[01:12](或[01:24]).因为0没有填充,我想知道是否还有其他东西我可以传递给strptime接受小时而不领先0; 或者我应该尝试分裂,然后填充字符串; 或使用一些其他构造日期时间对象的方法.
此外,它看起来不像strptime接受AM/PM为"AM"或"PM",所以我也必须纠正它...
注意,我无法批量处理这些字符串.我从一个外国应用程序一次一次收到它们,有时使用格式很好的Unix纪元时间戳,但偶尔会使用这种格式.动态处理它们是唯一的选择.
我正在使用Python 2.7导入一些Python 3功能.
from __future__ import (print_function, unicode_literals)
Run Code Online (Sandbox Code Playgroud)