如何从字符串列表中提取数字?

时间:2016-10-28 14:59:49

标签: python string python-2.x

我应该如何从

中提取数字
a = ['1 2 3', '4 5 6', 'invalid']

我试过了:

mynewlist = [s for s in a if s.isdigit()]
print mynewlist

for strn in a:
    values = map(float, strn.split())
print values

两者都失败了,因为数字之间有空格。

注意:我正在努力实现输出:

[1, 2, 3, 4, 5, 6]

6 个答案:

答案 0 :(得分:3)

这应该适用于您的特定情况,因为您在列表中包含一个字符串。因此你需要压扁它:

new_list = [int(item) for sublist in a for item in sublist if item.isdigit()]

答案 1 :(得分:3)

假设列表只是字符串:

[int(word) for sublist in map(str.split, a) for word in sublist if word.isdigit()]

答案 2 :(得分:3)

我认为您需要将list中的每个项目作为空格上的拆分字符串进行处理。

a = ['1 2 3', '4 5 6', 'invalid']
numbers = []
for item in a:
    for subitem in item.split():
        if(subitem.isdigit()):
            numbers.append(subitem)
print(numbers)

['1', '2', '3', '4', '5', '6']

或者整洁有序地理解:

[item for subitem in a for item in subitem.split() if item.isdigit()]

答案 3 :(得分:2)

sets的帮助下,你可以这样做:

>>> a = ['1 2 3', '4 5 6', 'invalid']
>>> valid = set(" 0123456789")
>>> [int(y) for x in a if set(x) <= valid for y in x.split()]
[1, 2, 3, 4, 5, 6]

如果字符串包含valid集中的字符,则会包含字符串 中的数字。

答案 4 :(得分:0)

mynewlist = [s for s in a if s.isdigit()]
print mynewlist

无效,因为您正在迭代数组的内容,该数组由三个字符串组成:

  1. &#39; 1 2 3&#39;
  2. &#39; 4 5 6&#39;
  3. &#39;无效&#39;
  4. 这意味着您必须再次对每个字符串进行迭代。

    你可以试试像

    这样的东西
    mynewlist = []
    for s in a:
        mynewlist += [digit for digit in s if digit.isdigit()] 
    

答案 5 :(得分:0)

单线解决方案:

new_list = [int(m) for n in a for m in n if m in '0123456789']