如何将 str 转换为 int python
How to convert str to int python
我有一个函数 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模块很重要
这应该很简单。不知道你不明白的是什么。这是您的 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])
我认为你在应该做 int(x[2]) 的时候做 int(x[1]),因为第一个元素在 0
x[0] 是 3024
x[1] 是 eu_kyiv
x[2] 是 24834
所以试试
return max(a, key=lambda x: int(x[2]))
我建议使用 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
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])]
我有一个函数 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模块很重要
这应该很简单。不知道你不明白的是什么。这是您的 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])
我认为你在应该做 int(x[2]) 的时候做 int(x[1]),因为第一个元素在 0
x[0] 是 3024
x[1] 是 eu_kyiv
x[2] 是 24834
所以试试
return max(a, key=lambda x: int(x[2]))
我建议使用 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
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])]