Python:“1-2-3-4”到[1,2,3,4]

时间:2009-09-25 18:33:10

标签: python

"1-2-3-4"格式的字符串转换为列表[1, 2, 3, 4]的最佳方法是什么?该字符串也可以为空,在这种情况下,转换应返回空列表[]

这就是我所拥有的:

map(lambda x: int(x),
    filter(lambda x: x != '',
           "1-2-3-4".split('-')))

编辑:对不起所有在我更正问题之前回复的人,在第一分钟左右就不清楚了。

7 个答案:

答案 0 :(得分:12)

您可以使用列表推导使其更短。使用if来计算空字符串。

the_string = '1-2-3-4'

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

答案 1 :(得分: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]

答案 2 :(得分:4)

将高阶函数转换为更易读的列表理解

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

其余的都很好。

答案 3 :(得分:2)

从您的示例的格式中,您需要列表中的int。如果是这样,那么你需要将字符串数转换为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']

编辑:修改我的回答以反映问题中的更新。

如果列表可能格式不正确,那么如果您的朋友,请“尝试抓住”。这将强制列表格式正确,或者您获得一个空列表。

>>> 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')
[]

答案 4 :(得分: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]

答案 5 :(得分:0)

def convert(s):
    if s:
        return map(int, s.split("-"))
    else:
        return []

答案 6 :(得分:0)

你不需要lambda,而split不会给你空元素:

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