2009-09-25 98 views
2

什么是字符串转换的格式"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('-'))) 

编辑:对不起那些之前我纠正我的问题谁回答的,目前还不清楚第一分钟左右。

+0

你实现你没有检查空字符串,对吧?你正在检查新列表的项目是否为空字符串。这些是不同的事情。 – SilentGhost 2009-09-25 18:48:52

+0

@SilentGhost:我不知道,我的算法可以制成不同的,但我的方法效果为好。 '“”.split(“ - ”)'返回'[“”]''。我的算法的渐近时间复杂度比理想情况差,但在这种情况下它可以忽略不计。 – 2009-09-26 14:27:43

回答

12

您可以使用列表理解来缩短它。使用if来说明空字符串。

the_string = '1-2-3-4' 

[int(x) for x in the_string.split('-') if x != ''] 
+0

你为什么要检查这样的空字符串? – SilentGhost 2009-09-25 18:44:41

+0

SilentGhost,问题说在空字符串的情况下它应该返回一个空列表:“字符串也可能是空的,在这种情况下,转换应该返回一个空列表[]。” – 2009-09-25 18:51:32

+0

那你为什么要这样做呢?你不知道什么对象评价为False? – SilentGhost 2009-09-25 18:54:42

8
>>> for s in ["", "0", "-0-0", "1-2-3-4"]: 
...  print(map(int, filter(None, s.split('-')))) 
... 
[] 
[0] 
[0, 0] 
[1, 2, 3, 4] 
+0

对不起,我现在纠正了我的问题。 – 2009-09-25 18:34:51

+0

@blahblah,我更新我的回答太 – 2009-09-25 18:36:35

+0

这不会ADRESS空刺痛情况。 – voyager 2009-09-25 18:44:11

4

转换的高阶函数以一个更可读的列表理解

[ int(n) for n in "1-2-3-4".split('-') if n != '' ] 

其余部分是细。

2

从你的例子的格式,你要廉政局在列表中。如果是这样,那么你将需要将字符串数字转换为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') 
[] 
0
def convert(s): 
    if s: 
     return map(int, s.split("-")) 
    else: 
     return [] 
0

你不需要的拉姆达和拆分不会给你空元素:

map(int, filter(None,x.split("-"))) 
+0

不幸的是,这打破了空弦。 – mipadi 2009-09-25 19:32:51

+0

嗯......我没有注意到,如果输入是一个空字符串(我认为它返回一个空列表),split会返回一个空字符串。用过滤器修复 – fortran 2009-09-25 22:37:42

1

我会去这个:

>>> 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] 
相关问题