Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python-从列表中的字符串中删除所有非数字字符_Python_List_List Comprehension - Fatal编程技术网

python-从列表中的字符串中删除所有非数字字符

python-从列表中的字符串中删除所有非数字字符,python,list,list-comprehension,Python,List,List Comprehension,我有一份清单: my_list = ['Judy 88 5', 'animal 91 5', 'Mo 86 5', 'Geno 87 6', 'exhaled 87 6'] 我想从此列表中删除所有非数字项,即- ['88 5', '91 5', '86 5', '87 6', '87 6'] 我只想要两位数的数字,即- ['88', '91', '86', '87', '87'] 我如何在不更改索引的情况下实现它? 我试着用 my_list = [elem for elem in my_l

我有一份清单:

my_list = ['Judy 88 5', 'animal 91 5', 'Mo 86 5', 'Geno 87 6', 'exhaled 87 6']
我想从此列表中删除所有非数字项,即-

['88 5', '91 5', '86 5', '87 6', '87 6']
我只想要两位数的数字,即-

['88', '91', '86', '87', '87']
我如何在不更改索引的情况下实现它? 我试着用

my_list = [elem for elem in my_list if not any(c.isalpha() for c in elem)]
但它只是给了我一张空名单

编辑: regex在这个列表上帮助了我,但如果列表是这样的话会怎么样:

my_list = ['J55udy 88 5', 'anim31al 91 5', 'Mo2 86 5', 'Geno 87 6', 'exhaled 87 6']
<>我的列表所有的方式都在改变,但是它有一个固定的样式,首先是用户名,然后是两位数,然后是一个数字,问题是有时用户在他的名字中使用数字,即使列表看起来是这样的,我怎么能只得到中间的2位数字?
    my_list = ['J558udy 88 5', 'anim31al 91 5', 'Mo52 86 5', 'Gen3o 87 6', 'exhaled 87 6']
使用正则表达式

Ex:

import re

my_list = ['Judy 88 5', 'animal 91 5', 'Mo 86 5', 'Geno 87 6', 'exhaled 87 6']
res = []
for i in my_list:
    m = re.search(r"\b(\d{2})\b", i)
    if m:
        res.append(m.group())
print(res)
['88', '91', '86', '87', '87']
输出:

import re

my_list = ['Judy 88 5', 'animal 91 5', 'Mo 86 5', 'Geno 87 6', 'exhaled 87 6']
res = []
for i in my_list:
    m = re.search(r"\b(\d{2})\b", i)
    if m:
        res.append(m.group())
print(res)
['88', '91', '86', '87', '87']
  • \b
    正则表达式边界
  • \d{2}
    查找具有2位数字的int

您可以使用以下正则表达式:

import re
my_list = ['Judy 88 5', 'animal 91 5', 'Mo 86 5', 'Geno 87 6', 'exhaled 87 6']
regex = re.compile(r'\b\d\d\b')
my_list = [regex.search(i).group() for i in my_list]
我的列表将变成:

['88', '91', '86', '87', '87']

Regex确实是一个很好的解决方案,但它也可以在不使用Regex的情况下实现。下面的解决方案将在字符串中找到所有两位数,即使您有多个实例,例如:
'blabla88 5 63'

my_list = ['Judy 88 5', 'animal 91 5', 'Mo 86 5', 'Geno 87 6', 'exhaled 87 6']
digits = "123456789"
new_list = []

for elt in my_list:
    for k, l in enumerate(elt):
        if l in digits and k!= len(elt)-1 and elt[k+1] in digits:
            new_str = elt[k:k+2]
            new_list.append(new_str)
它可以变成一个衬里:

digits = "123456789"
[elt[k:k+2] for elt in my_list for k, l in enumerate(elt) if l in digits and k!= len(elt)-1 and elt[k+1] in digits]
Out[37]: ['88', '91', '86', '87', '87']

您可能可以使用正则表达式来提取数字字符串

import re

my_list = ['Judy 88 5', 'animal 91 5', 'Mo 86 5', 'Geno 87 6', 'exhaled 87 6']
nums = [re.search('\d+', lst).group(0) for lst in my_list]
print(nums)
输出

['88', '91', '86', '87', '87']
[Finished in 0.1s]

在编写列表理解之前,只需逐行写下您想要的内容,然后开始将其放在一起。如果列表始终包含示例中所示的字符串,您也可以使用
[elem.split()[1]for elem in my_list]
。这是一个很好的提示。。。谢谢你也解释一下搜索是做什么的吗?为什么要使用另一个列表进行附加?我正在使用另一个列表…以防您没有一个包含2位数字的值…如果您确定
my_列表中的所有元素都有2位数字,那么您可以使用一个列表压缩
my_列表=[re.search(r”\b(\d{2})\b),I.group()。。有时,列表中包含2个字母字符,如何传递?