#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()))
И это другой простой для понимания способ 🙂