J'ai une liste de chaînes et j'essaie de la parcourir et de créer à chaque itération une nouvelle liste sans l'une des chaînes. J'ai essayé ce qui suit:

tx_list = ['9540a4ff214d6368cc557803e357f8acebf105faad677eb06ab10d1711d3db46', 'dd92415446692593a4768e3604ab1350c0d81135be42fd9581e2e712f11d82ed',....]
for txid in tx_list:
    tx_list_copy = tx_list
    tx_list_without_txid = tx_list_copy.remove(txid)

Mais à chaque itération, la nouvelle liste est vide.

2
Assi Guri 1 juin 2020 à 20:21

3 réponses

Meilleure réponse

La déclaration:

tx_list_copy = tx_list

Ne copie pas la liste mais fait référence au même objet mémoire: tx_list et tx_list_copy sont des références différentes à la même liste d'objets mémoire . Cela signifie que si vous modifiez le premier, le second sera également modifié.
À la place, pour copier la liste d'origine, vous devez utiliser la méthode .copy():

for txid in tx_list:
    tx_list_copy = tx_list.copy()     # copy the original list
    tx_list_copy.remove(txid)         # remove the txid element, this is already the list without the txid element

Ensuite, pour supprimer l'élément txid de tx_list_copy, vous pouvez utiliser la méthode .remove(), qui supprime l'élément dans tx_list_copy, c'est donc déjà la liste dont vous avez besoin.

1
Konqui 1 juin 2020 à 17:34

Si vous souhaitez créer plusieurs listes, cela ne fonctionnera pas, vous devrez créer un dictionnaire:

list_box = {}
for txid in tk_list:
    list_box[txid] = tx_list.copy()
    list_box[txid].remove(txid)

Cela créera une nouvelle liste avec le nom list_box[txid] où txid est l'élément qui n'existe pas dans la liste (pour une meilleure compréhension). J'espère que cela aidera!

0
Diwakar Rankawat 2 juin 2020 à 12:26

Vous pouvez essayer ceci:

for i in range(len(tx_list)) :
    tx_list_without_txid = tx_list[:i] + tx_list[i+1:]
    # do something with the new list...
0
lenik 1 juin 2020 à 17:31