繁体   English   中英

查找字符串中的最小数字

[英]Find smallest number in string

我试图在列表的每个字符串元素中找到最小的数字。

VIS = ['GREATER THAN 10 KM ', 'GREATER THAN 10 KM ', 'GREATER THAN 10 KM    ', '10 KM, REDUCING TO 6KM, IN PASSING SHOWERS ', '10 KM, REDUCING TO 6KM, IN PASSING SHOWERS ']

我已经尝试过在每个元素上使用split()函数,但是“ 6KM”中缺少空格似乎使它无法正常工作。

minVIS = []
for i in range(len(VIS)):
    minVIS.append(min(VIS[i].split()))

print(minVIS)

返回

minVIS = ['10', '10', '10', '10', '10', '10', '10', '10', '10', '10', '10', '10', '10', '10', '10', '10KM,', '10KM,', '10KM,']

理想情况下,我想要

minVis = [10, 10, 10, 6, 6]

例如。

使用正则表达式。 re.findall(r"\\d+", STRING)获取字符串中的所有整数。

例如:

import re

VIS = ['GREATER THAN 10 KM ', 'GREATER THAN 10 KM ', 'GREATER THAN 10 KM    ', '10 KM, REDUCING TO 6KM, IN PASSING SHOWERS ', '10 KM, REDUCING TO 6KM, IN PASSING SHOWERS ']

minVIS = []
for i in VIS:
    minVIS.append(min(map(int, re.findall(r"\d+", i))))
    #If floats in string Thanks Anton vBR
    #minVIS.append(min(map(float, re.findall(r"\d+\.?\d*", i))))

print(minVIS)

输出:

[10, 10, 10, 6, 6]
import re
VIS = ['GREATER THAN 10 KM ', 'GREATER THAN 10 KM ', 'GREATER THAN 10 KM    ', '10 KM, REDUCING TO 6KM, IN PASSING SHOWERS ', '10 KM, REDUCING TO 6KM, IN PASSING SHOWERS ']
print (list((min(map(int, re.findall(r'\d+', item)))) for item in VIS))

otuput:

[10, 10, 10, 6, 6]

from itertools import groupby

result = []
for item in VIS:
    result.append(min([int(''.join(i)) for is_digit, i in groupby(item, str.isdigit) if is_digit]))
print (result)

# equal with list comprehension

print ([min([int(''.join(i)) for is_digit, i in groupby(item, str.isdigit) if is_digit]) for item in VIS])

otuput:

[10, 10, 10, 6, 6]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM