#python #python-3.x #re
Вопрос:
У меня есть функция max_population
, которая должна выводить ('eu_kyiv', 24834)
данные . Но выход ('eu_kyiv', '24834')
Как я могу сделать так ('24834')
, чтобы это было выведено как int
Мой код:
import re
def max_population(data):
a = []
for i in data:
b = re.findall(r',S _S ,[0-9] ', i)
a = [[ b for b in i.split(',') if b] for i in b]
return max(a, key=lambda x: int(x[1]))
data = ["id,name,poppulation,is_capital",
"3024,eu_kyiv,24834,y",
"3025,eu_volynia,20231,n",
"3026,eu_galych,23745,n",
"4892,me_medina,18038,n",
"4401,af_cairo,18946,y",
"4700,me_tabriz,13421,n",
"4899,me_bagdad,22723,y",
"6600,af_zulu,09720,n"]
print(max_population(data))
Я пытался
for i in data:
b = re.findall(r',S _S ,[0-9] ', i)
a = [[ int(b) for b in i.split(',') if b] for i in b]
return max(a, key=lambda x: int(x[1]))
Но ошибка вывода ValueError: invalid literal for int() with base 10: 'eu_kyiv'
Важно использовать модуль re
Ответ №1:
import re
def max_population(data):
a = []
for i in data:
b = re.findall(r',S _S ,[0-9] ', i)
a = [[b for b in i.split(',') if b] for i in b]
maximum = max(a, key=lambda x: int(x[1]))
return [maximum[0],int(maximum[1])]
Ответ №2:
Я думаю, что вы делаете инт(х[1]), Когда вы должны делать инт(х[2]), потому что первый элемент находится в положении 0
и x[0] является 3024
х[1] является eu_kyiv
х[2] является 24834
поэтому постарайтесь
вернуть максимум(а, ключ=лямбда-х: int(х[2]))
Ответ №3:
Это должно быть довольно просто. Не уверен, что это то, чего ты не понимаешь. Это ваша max
функция. Вы действительно говорите ему сравнивать, используя второй индекс, как int
и что это будет, но вывод будет представлять собой точные значения, которые он сравнивал, используя определенный ключ. Поэтому вы просто получаете вывод, а затем вручную измените его на int.
def max_population(data):
a = []
for i in data:
b = re.findall(r',S _S ,[0-9] ', i)
a = [[ b for b in i.split(',') if b] for i in b]
res = max(a, key=lambda x: int(x[1]))
return res[0], int(res[1])
Комментарии:
1. Это не работает
TypeError: int() argument must be a string, a bytes-like object or a number, not 'list '
2. @ИльяГринишин edited the answer. Я забыл вернуть разрешение и вместо этого вернул. XD
Ответ №4:
Я предлагаю использовать csv
модуль, чтобы получить poppulation
значение:
>>> data = ["id,name,poppulation,is_capital",
... "3024,eu_kyiv,24834,y",
... "3025,eu_volynia,20231,n",
... "3026,eu_galych,23745,n",
... "4892,me_medina,18038,n",
... "4401,af_cairo,18946,y",
... "4700,me_tabriz,13421,n",
... "4899,me_bagdad,22723,y",
... "6600,af_zulu,09720,n"]
>>>
>>> import csv
>>> max(int(row['poppulation']) for row in csv.DictReader(data))
24834
Если также важно использовать re
модуль, это простой способ вставить его туда:
>>> import re
>>> max(int(re.match(".*", row['poppulation'])[0]) for row in csv.DictReader(data))
24834