简体   繁体   English

查找字符串中的最小数字

[英]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.

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