的Python: “1-2-3-4”[1,2,3,4]
什么是字符串转换的格式"1-2-3-4"
到列表[1, 2, 3, 4]
最好的方法是什么?该字符串也可能为空,在这种情况下,转换应返回空列表[]
。的Python: “1-2-3-4”[1,2,3,4]
这是我有:
map(lambda x: int(x),
filter(lambda x: x != '',
"1-2-3-4".split('-')))
编辑:对不起那些之前我纠正我的问题谁回答的,目前还不清楚第一分钟左右。
您可以使用列表理解来缩短它。使用if
来说明空字符串。
the_string = '1-2-3-4'
[int(x) for x in the_string.split('-') if x != '']
你为什么要检查这样的空字符串? – SilentGhost 2009-09-25 18:44:41
SilentGhost,问题说在空字符串的情况下它应该返回一个空列表:“字符串也可能是空的,在这种情况下,转换应该返回一个空列表[]。” – 2009-09-25 18:51:32
那你为什么要这样做呢?你不知道什么对象评价为False? – SilentGhost 2009-09-25 18:54:42
>>> for s in ["", "0", "-0-0", "1-2-3-4"]:
... print(map(int, filter(None, s.split('-'))))
...
[]
[0]
[0, 0]
[1, 2, 3, 4]
对不起,我现在纠正了我的问题。 – 2009-09-25 18:34:51
@blahblah,我更新我的回答太 – 2009-09-25 18:36:35
这不会ADRESS空刺痛情况。 – voyager 2009-09-25 18:44:11
转换的高阶函数以一个更可读的列表理解
[ int(n) for n in "1-2-3-4".split('-') if n != '' ]
其余部分是细。
从你的例子的格式,你要廉政局在列表中。如果是这样,那么你将需要将字符串数字转换为int。如果不是,那么在字符串拆分后完成。
text="1-2-3-4"
numlist=[int(ith) for ith in text.split('-')]
print numlist
[1, 2, 3, 4]
textlist=text.split('-')
print textlist
['1', '2', '3', '4']
编辑:修改我的答案以反映问题中的更新。
如果列表可以那么畸形,如果你的朋友“的try ... catch”。这将强制该列表格式正确,或者您得到一个空列表。
>>> def convert(input):
... try:
... templist=[int(ith) for ith in input.split('-')]
... except:
... templist=[]
... return templist
...
>>> convert('1-2-3-4')
[1, 2, 3, 4]
>>> convert('')
[]
>>> convert('----1-2--3--4---')
[]
>>> convert('Explicit is better than implicit.')
[]
>>> convert('1-1 = 0')
[]
def convert(s):
if s:
return map(int, s.split("-"))
else:
return []
我会去这个:
>>> the_string = '1-2-3-4- -5- 6-'
>>>
>>> [int(x.strip()) for x in the_string.split('-') if len(x)]
[1, 2, 3, 4, 5, 6]
你实现你没有检查空字符串,对吧?你正在检查新列表的项目是否为空字符串。这些是不同的事情。 – SilentGhost 2009-09-25 18:48:52
@SilentGhost:我不知道,我的算法可以制成不同的,但我的方法效果为好。 '“”.split(“ - ”)'返回'[“”]''。我的算法的渐近时间复杂度比理想情况差,但在这种情况下它可以忽略不计。 – 2009-09-26 14:27:43