Как преобразовать строку в число?

402 просмотра
0
0 Комментариев

Ребят подскажите, как преобразовать строку в число оптимально.

Есть список со вложенными списками:

price = [['MOSCOW-LONDON:', '120', 'EUR'], ['LONDON-NEWYORK:', '235', 'USD'],
         ['NEWYORK-BRASILIA:', '112', 'BRL'], ['BRASILIA-PEKING:', '243', 'CNY'],
         ['PEKING-SEOUL:', '97', 'KRW'], ['SEOUL-DELHI:', '130', 'INR'],
         ['DELHI-MOSCOW:', '19526', 'RUB']]

Мне нужно price[1] перевести в int.

Как лучше всего это сделать?


Добавить комментарий

3 Answers

Python Опубликовано 16.12.2018
0

price = [['MOSCOW-LONDON:', '120', 'EUR'], ['LONDON-NEWYORK:', '235', 'USD'], ['NEWYORK-BRASILIA:', '112', 'BRL'], ['BRASILIA-PEKING:', '243', 'CNY'], ['PEKING-SEOUL:', '97', 'KRW'], ['SEOUL-DELHI:', '130', 'INR'], ['DELHI-MOSCOW:', '19526', 'RUB']]
new_price = list()
for item in price:
    item[1] = int(item[1])
    new_price.append(item)
print(new_price)

Добавить комментарий
0

Зная индекс числа, вы можете пройтись по списку добавить все числа в список таким образом:

lst = []
for x in price:
    lst.append(int(x[1]))

А если не знаете, то нужно добавить дополнительную проверку:

lst = []
for x in price:
    for j in x:
    if j.isdigit():
        lst.append(int(j)) # если работаете или нужны числа с плавающей точкой, то float(j)

Таким образом в списке lst будут нужные вам данные

Если вы хотите просто преобразовать список, то вам нужно использовать конструкцию list comprehension:

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

price = [['MOSCOW-LONDON:', '120', 'EUR'], ['LONDON-NEWYORK:', '235', 'USD'],
         ['NEWYORK-BRASILIA:', '112', 'BRL'], ['BRASILIA-PEKING:', '243', 'CNY'],
         ['PEKING-SEOUL:', '97', 'KRW'], ['SEOUL-DELHI:', '130', 'INR'],
         ['DELHI-MOSCOW:', '19526', 'RUB']]
 
price = [int(y) if y.isdigit() else y for x in price for y in x]
 
print(price)
 
# ['MOSCOW-LONDON:', 120, 'EUR', 'LONDON-NEWYORK:', 235, 'USD', 'NEWYORK-BRASILIA:', 112, 'BRL', 'BRASILIA-PEKING:', 243, 'CNY', 'PEKING-SEOUL:', 97, 'KRW', 'SEOUL-DELHI:', 130, 'INR', 'DELHI-MOSCOW:', 19526, 'RUB']

А так можно сохранить текущую размерность и также преобразовать числа:

price = [['MOSCOW-LONDON:', '120', 'EUR'], ['LONDON-NEWYORK:', '235', 'USD'],
         ['NEWYORK-BRASILIA:', '112', 'BRL'], ['BRASILIA-PEKING:', '243', 'CNY'],
         ['PEKING-SEOUL:', '97', 'KRW'], ['SEOUL-DELHI:', '130', 'INR'],
         ['DELHI-MOSCOW:', '19526', 'RUB']]
 
length = len(price)
 
for x in range(length):
    price[x] = [int(y) if y.isdigit() else y for y in price[x]]
 
print(price)
# [['MOSCOW-LONDON:', 120, 'EUR'], ['LONDON-NEWYORK:', 235, 'USD'], ['NEWYORK-BRASILIA:', 112, 'BRL'], ['BRASILIA-PEKING:', 243, 'CNY'], ['PEKING-SEOUL:', 97, 'KRW'], ['SEOUL-DELHI:', 130, 'INR'], ['DELHI-MOSCOW:', 19526, 'RUB']]

Добавить комментарий
0

Скорее всего вам приходят данные с запроса , если порядок вложенного листа не будет изменен…

price = [['MOSCOW-LONDON:', '120', 'EUR'], ['LONDON-NEWYORK:', '235', 'USD'], ['NEWYORK-BRASILIA:', '112', 'BRL'], ['BRASILIA-PEKING:', '243', 'CNY'], ['PEKING-SEOUL:', '97', 'KRW'], ['SEOUL-DELHI:', '130', 'INR'], ['DELHI-MOSCOW:', '19526', 'RUB']]
all_price = [p[1] for p in price]
>>> ['120', '235', '112', '243', '97', '130', '19526',]

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up