Как превратить числа str в тип int в списке? - PullRequest
0 голосов
/ 06 августа 2020

Я новичок ie в python / python3 здесь, пытаюсь выяснить следующее ...

У меня есть список, содержащий следующие данные:

datalist = ['1','2','abc','def','a234','b456']

print(type(new_datalist[0]))

print(type(new_datalist[1]))

<class 'str'>

<class 'str'>

Есть ли способ импровизировать datalist, чтобы преобразовать числа в списке в int из текущего типа str?

Желаемый результат:

new_datalist = []

print(new_datalist)

[1, 2 ,'abc','def','a234','b456']


print(type(new_datalist[0]))

print(type(new_datalist[1]))

<class 'int'>

<class 'int'>

Ответы [ 3 ]

1 голос
/ 11 августа 2020

Вы можете использовать список, чтобы элегантно решить вашу проблему.

datalist = [int(data) if data.isdigit() else data for data in datalist]
0 голосов
/ 06 августа 2020

Вы можете создать функцию, которая преобразуется в int, где это возможно:

def int_or_str(s):
    "try to convert to int, but return string if it fails"
    try:
        return int(s)
    except ValueError:
        return s

new_datalist = [int_or_str(s) for s in datalist]

, или, если вы предпочитаете однострочник, вам нужно будет сделать что-то вроде этого, чтобы учесть возможность отрицательных чисел:

new_datalist = [int(s)  
                if s.isnumeric() or (s and s[0] == '-' and s[1:].isnumeric())
                else s
                for s in datalist]

Также можно использовать регулярные выражения:

import re

new_datalist = [int(s) if re.match('-?\d+$', s) else s for s in datalist]
0 голосов
/ 06 августа 2020

Попробуйте это -

d = [int(i) if i.isnumeric() else i for i in datalist]
print(d)
[1, 2 ,'abc','def','a234','b456']

См. Типы -

[type(i) for i in d]
[int, int, str, str, str, str]
...