[英]Find smallest number in string
I'm trying to find the smallest number in each string element of my list. 我试图在列表的每个字符串元素中找到最小的数字。
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 ']
I've tried the split() function on each element but the lack of a space in the "6KM" seems to make it work incorrectly. 我已经尝试过在每个元素上使用split()函数,但是“ 6KM”中缺少空格似乎使它无法正常工作。
minVIS = []
for i in range(len(VIS)):
minVIS.append(min(VIS[i].split()))
print(minVIS)
Returns 返回
minVIS = ['10', '10', '10', '10', '10', '10', '10', '10', '10', '10', '10', '10', '10', '10', '10', '10KM,', '10KM,', '10KM,']
Ideally, I'd like 理想情况下,我想要
minVis = [10, 10, 10, 6, 6]
for example. 例如。
Using Regex. 使用正则表达式。
re.findall(r"\\d+", STRING)
get all ints in the string. re.findall(r"\\d+", STRING)
获取字符串中的所有整数。
Ex: 例如:
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)
Output: 输出:
[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: 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: otuput:
[10, 10, 10, 6, 6]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.