python3 lista data python list copying

python - data - Obtención de lista sin k''th elemento de forma eficiente y no destructiva.



python copy string (7)

Probablemente no sea el más eficiente, pero el programador funcional en mí probablemente escribiría esto.

import operator from itertools import * def inits(list): for i in range(0, len(list)): yield list[:i] def tails(list): for i in range(0, len(list)): yield list[i+1:] def withouts(list): return imap(operator.add, inits(list), tails(list)) for elt, without in izip(l, withouts(l)): ...

import functools, operator for elt in l: without = filter(functools.partial(operator.ne, elt), l)

No creo que sea lo correcto , pero es corto. :-)

Tengo una lista en python y me gustaría recorrerla y construir una lista de forma selectiva que contenga todos los elementos excepto el elemento k''th actual. Una forma de hacerlo es esta:

l = [(''a'', 1), (''b'', 2), (''c'', 3)] for num, elt in enumerate(l): # construct list without current element l_without_num = copy.deepcopy(l) l_without_num.remove(elt)

pero esto parece ineficiente y poco elegante. ¿Hay una manera fácil de hacerlo? nota que quiero obtener esencialmente una porción de la lista original que excluye el elemento actual. Parece que debería haber una manera más fácil de hacer esto.

Gracias por tu ayuda.


Te ayudaría si explicaras más cómo querías usarlo. Pero puedes hacer lo mismo con la lista de comprensión.

l = [(''a'', 1), (''b'', 2), (''c'', 3)] k = 1 l_without_num = [elt for num, elt in enumerate(l) if not num == k]

Esto también es más eficiente en la memoria para iterar si no tiene que almacenarlo en l_without_num.


Usando operador de diferencia en conjuntos:

list(set(l).difference([l[k]]) l=[(''a'', 1), (''b'', 2), (''c'', 3)] list(set(l).difference([l[1]])) [(''a'', 1), (''c'', 3)]


#!/bin/bash `python -c "''/n''.join(mylist[:])" 2>NULL | sed ''/mybadelement/d''`

jajaja


l = [(''a'', 1), (''b'', 2), (''c'', 3)] k = 1 l_without_num = l[:k] + l[(k + 1):]

¿Es esto lo que quieres?


l=[(''a'', 1), (''b'', 2), (''c'', 3)] k=1 l_without_num=l[:] # or list(l) if you prefer l_without_num.pop(k)


new = [l[i] for i in range(len(l)) if i != k]