Найти строку в списке, содержащем наибольшее число

#python #string #list

#python #строка #Список

Вопрос:

Скажем, учитывая список строк 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»

Комментарии:

1. Ваш ввод всегда будет StateN ?

2. Да!!! Вывод всегда «StateN»

3. разве вы не можете удалить State ее и преобразовать в целое число? поскольку это не приносит ничего полезного?

4. Если ваш вывод только когда-либо StateN где 0 <= N < 10 , то просто отсортируйте его как обычно…

5. @AdamSmith, N<100

Ответ №1:

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

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

max(l, key=lambda x: int(re.search(r'd ', x).group(0)))
# 'State8'
 

Ответ №2:

 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]
 

Ответ №3:

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

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

max(states)
 

В противном случае это должно сработать

 max(int(s.replace('State', '')) for s in states)
 

Ответ №4:

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

 integers = [int(x[5:]) for x in str1]
print("State%d" % max(integers))
 

Ответ №5:

 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()))
 

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