将"1-2-3-4"
格式的字符串转换为列表[1, 2, 3, 4]
的最佳方法是什么?该字符串也可以为空,在这种情况下,转换应返回空列表[]
。
这就是我所拥有的:
map(lambda x: int(x),
filter(lambda x: x != '',
"1-2-3-4".split('-')))
编辑:对不起所有在我更正问题之前回复的人,在第一分钟左右就不清楚了。
答案 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("-")))