Найти строку в списке, содержащую наибольшее число - PullRequest
2 голосов
/ 19 апреля 2019

Учитывая список строк, скажем str1= ["State0", "State1", "State2", "State5", "State8"].

Мне нужно найти самое высокое состояние (здесь "State8").Как я могу найти его?

Есть ли более короткий путь, чем

str1= ["State0", "State1", "State2", "State5", "State8"]
k=0
for n in str1:
    s1 = ''.join(x for x in n if x.isdigit())
    if k<int(s1):
        k=int(s1)
print("State"+str(k))`

Вывод: "State8"

Ответы [ 5 ]

3 голосов
/ 19 апреля 2019

Вы можете использовать встроенную функцию max, указав следующее key:

import re
l = ["State0", "State1", "State2", "State5", "State8"]

max(l, key=lambda x: int(re.search(r'\d+', x).group(0)))
# 'State8'
0 голосов
/ 19 апреля 2019

Создайте новый список значений, содержащий только целые части, получите max() этого списка, а затем напечатайте его с помощью «State»:

integers = [int(x[5:]) for x in str1]
print("State%d" % max(integers))
0 голосов
/ 19 апреля 2019

Если N < 10 в StateN, то этого должно быть достаточно

states = ['State0', 'State1', 'State2', 'State5', 'State8']

max(states)

Иначе, это должно сработать

max(int(s.replace('State', '')) for s in states)
0 голосов
/ 19 апреля 2019
import re
str1= ["State0", "State1", "State2", "State5", "State8"]

max_1 = sorted(str1, key=lambda x: int(re.findall("\d+$",x)[0]), reverse=True)[0]
min_1 = sorted(str1, key=lambda x: int(re.findall("\d+$",x)[0]), reverse=True)[-1]
0 голосов
/ 19 апреля 2019
str1= ["State0", "State1", "State2", "State15","State8","State6", "State24", "State7","State11"]
liste = list()
for i in str1:
   liste.append(int(i.replace("State","")))
liste.sort()
print("State"+str(liste.pop()))

И это другой способ, простой для понимания :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...