Cómo agregar varios elementos en una línea en Python

91

Yo tengo:

count = 0
i = 0
while count < len(mylist):
    if mylist[i + 1] == mylist[i + 13] and mylist[i + 2] == mylist[i + 14]:
        print mylist[i + 1], mylist[i + 2]
    newlist.append(mylist[i + 1])
    newlist.append(mylist[i + 2])
    newlist.append(mylist[i + 7])
    newlist.append(mylist[i + 8])
    newlist.append(mylist[i + 9])
    newlist.append(mylist[i + 10])
    newlist.append(mylist[i + 13])
    newlist.append(mylist[i + 14])
    newlist.append(mylist[i + 19])
    newlist.append(mylist[i + 20])
    newlist.append(mylist[i + 21])
    newlist.append(mylist[i + 22])
    count = count + 1
    i = i + 12

Quería convertir las newlist.append()declaraciones en algunas declaraciones.

lo que sea
fuente
Bueno, obviamente no es lo mismo si obtienes resultados diferentes.
JJJ
Esta es una sintaxis inválida.
TerryA
4
Suponiendo que sus objetos están destinados a ser listas, su código no es Python válido ya que está usando en []lugar de (). Publique código de trabajo real.
BrenBarn

Respuestas:

227

No. El método para agregar una secuencia completa es list.extend().

>>> L = [1, 2]
>>> L.extend((3, 4, 5))
>>> L
[1, 2, 3, 4, 5]
Ignacio Vázquez-Abrams
fuente
'insertar' funciona como 'agregar' pero agrega al principio de la lista. ¿Existe una función para agregar varios valores al comienzo de una lista?
gorrión
@sparrow: No. Asignar por sectores en su lugar.
Ignacio Vazquez-Abrams
¿Necesita que la segunda entrada sea una lista o puede ser cada elemento separado por comas?
Charlie Parker
@CharlieParker: el argumento list.extend()debe ser iterable.
Ignacio Vazquez-Abrams
5

No.

En primer lugar, appendes una función, por lo que no puede escribir append[i+1:i+4]porque está tratando de obtener una porción de algo que no es una secuencia. (No puede obtener un elemento de la misma, ya sea: append[i+1]está mal por la misma razón.) Cuando se llama a una función, el argumento va en paréntesis , es decir, los redondos: ().

En segundo lugar, lo que está intentando hacer es "tomar una secuencia y poner cada elemento en ella al final de esta otra secuencia, en el orden original". Eso está escrito extend. appendes "tomar esta cosa y ponerla al final de la lista, como un solo elemento , incluso si también es una lista ". (Recuerde que una lista es una especie de secuencia).

Pero luego, debe tener en cuenta que i+1:i+4es una construcción especial que aparece solo entre corchetes (para obtener un corte de una secuencia) y llaves (para crear un dictobjeto). No puede pasarlo a una función. Entonces no puedes extendcon eso. Necesita hacer una secuencia de esos valores, y la forma natural de hacerlo es con la rangefunción.

Karl Knechtel
fuente
5

También podrías:

newlist += mylist[i:i+22]
Kevin Postlewaite
fuente
2

Utilizar esta :

#Inputs
L1 = [1, 2]
L2 = [3,4,5]

#Code
L1+L2

#Output
[1, 2, 3, 4, 5]

Al usar el operador (+), puede omitir los múltiples operadores de agregar y extender en una sola línea de código y esto es válido para más de dos de las listas de L1 + L2 + L3 + L4 ... etc.

Feliz aprendizaje...:)

Idrisi_Kasim
fuente
1
mylist = [1,2,3]

def multiple_appends(listname, *element):
    listname.extend(element)

multiple_appends(mylist, 4, 5, "string", False)
print(mylist)

SALIDA:

[1, 2, 3, 4, 5, 'string', False]
Saoud Rehman
fuente
1

utilizar para bucle. Me gusta esto:

for x in [1,2,7,8,9,10,13,14,19,20,21,22]:
    new_list.append(my_list[i + x])
zakizakibzr
fuente