editar pythonicamente uma lista de tupples de strings [duplicado]

Nov 16 2020

mysql produziu uma lista de tuplas do formulário

a=[("1","2","3"),("4","5","6"),("7","8","9")]

Eu quero uma lista de tuplas do formulário

c=[("2","3"),("5","6"),("8","9")]

ou seja, os dois últimos elementos de cada tupla, então posso colocá-los em um comando my sql executemany e obter a próxima parte dos dados.

minha intuição era que eu poderia obter a matriz desejada com o comando

c=[for b in a: b[1:]]

mas python, não gosta disso. Por que isso não funciona e qual é a maneira mais pítônica de obter a lista desejada de tuplas?

Respostas

2 AnnZen Nov 16 2020 at 17:01

Já que você deseja os dois últimos elementos de cada tupla, usar a fatia [1:] (como nas outras respostas) não funcionará quando o número de elementos em cada tupla não for 3.

Em vez disso, use uma compreensão de lista com a fatia negativa de [:-2]:

a = [("1","2","3"),("4","5","6"),("7","8","9")]
a = [t[-2:] for t in a]
print(a)

Resultado:

[('2', '3'), ('5', '6'), ('8', '9')]
3 AdamSmith Nov 16 2020 at 16:54

Sua sintaxe está um pouco errada, mas optou pela abordagem certa.

c = [b[1:] for b in a]
3 AKX Nov 16 2020 at 16:54

Você vai querer dividir cada iitem em a:

>>> a = [("1","2","3"),("4","5","6"),("7","8","9")]
>>> [i[1:] for i in a]
[('2', '3'), ('5', '6'), ('8', '9')]
3 WasifHasan Nov 16 2020 at 16:55

Você pode continuar assim, aqui os loops for vão no final:

a=[(1,2,3),(4,5,6),(7,8,9)]
c=[b[1:] for b in a]
print(c)