Как преобразовать этот список в int - PullRequest
0 голосов
/ 14 апреля 2019

У меня есть следующий список:

[['3*4'],
 ['7*8*1'],
 ['8*2*4']]

И я хочу преобразовать это в int вот так, и оно должно вычислить цифры:

[[12],[56],[64]]

это то, что я уже пробовал:

newList= list(map(int, oldList))

Как это сделать?

Ответы [ 3 ]

2 голосов
/ 14 апреля 2019

Вы можете использовать

newlist = [[eval(v[0])] for v in oldlist]

или, возможно, несколько более питонический

newlist = [[eval(v)] for v, *w in oldlist]

Либо используется понимание списка, чтобы просмотреть каждый подсписок в вашем заданном списке, вынуть строку из списка, оценить ее как целочисленное значение, а затем обернуть это целое число в списке в ваш новый подсписок.

Обратите внимание, что eval опасно и должно использоваться только для ваших собственных строк. Если вы введете такую ​​строку, пользователь может напечатать что-нибудь, что отформатирует ваш жесткий диск или сделает другие неприятные вещи.

0 голосов
/ 14 апреля 2019

это довольно странно, но вы можете сделать это с помощью split:

initial_list = [['3*4'],
 ['7*8*1'],
 ['8*2*4']]

new_list = []
for mini_list in initial_list:
    multiplier = 1
    for number in mini_list[0].split('*'):
        multiplier *= int(number)
    new_list.append([multiplier])

print(new_list)

Выходы:

[[12], [56], [64]]
0 голосов
/ 14 апреля 2019

Существует различие между преобразованием строки в целое число и вычислением выражения.

Здесь вам нужно последнее.

Этого можно достичь с помощью eval().

l = [['3*4'],
     ['7*8*1'],
     ['8*2*4']]
out = [[eval(j) for j in i] for i in l]
#[[12], [56], [64]]

Обратите внимание, что встроенный eval() потенциально небезопасен, если вызывается при неанизированном вводе пользователем (например, они могут выполнять системные вызовы).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...