Python: One-liner para executar uma operação em elementos em um array 2d (lista de listas)?

StackOverflow https://stackoverflow.com/questions/6381638

Pergunta

Eu tenho uma lista de listas, cada uma contendo um número diferente de strings.Eu gostaria de (eficientemente) converter todos em ints, mas estou me sentindo meio denso, já que não consigo fazer isso funcionar para a minha vida.Eu estive tentando: newVals= [int (x) para x em [linha para linhas em valores]]

Onde 'valores' é a lista de listas.Ele continua dizendo que x é uma lista e, portanto, não pode ser o argumento se int ().Obviamente estou fazendo algo estúpido aqui, o que é?Existe um idioma aceito para esse tipo de coisa?

Foi útil?

Solução

Isso deixa os ints aninhados

[map(int, x) for x in values]

Se você quiser que eles sejam achatados, também não é difícil

para Python3 map() retorna um iterador.Você poderia usar

[list(map(int, x)) for x in values]

mas você pode preferir usar os LC aninhados nesse caso

[[int(y) for y in x] for x in values]

Outras dicas

Que tal:

>>> a = [['1','2','3'],['4','5','6'],['7','8','9']]
>>> [[int(j) for j in i] for i in a]
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

Você simplesmente usa ordem e parênteses incorretos - deveria ser:

inputVals = [['1','2','3'], ['3','3','2','2']]
[int(x) for row in inputVals for x in row]

Ou se você precisar de uma lista de lista na saída, então:

map(lambda row: map(int, row), inputVals)

uma forma feia é usar evalf:

>>> eval(str(a).replace("'",""))
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

se você não se importa com todos os seus números em uma matriz, pode ir:

>>> a = [['1','2','3'],['4','5','6'],['7','8','9']]
>>> map(int,sum(a,[]))
[1, 2, 3, 4, 5, 6, 7, 8, 9]

Outra solução alternativa

a = [[1, 2, 3], [7, 8, 6]]
list(map(lambda i: list(map(lambda j: j - 1, i)), a))
[[0, 1, 2], [6, 7, 5]] #output
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top