如何将 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])]