簡體   English   中英

通過變量從列表中刪除項目

[英]Removing item from a list by a variable

基本上我在從列表中刪除項目時遇到問題。 我想通過一個變量來做,就像這樣:

my_list = ["cat","dog","duck","horse","snake"]
import random
animal=(random.choice(my_list))
new_list = []
new_list.append(my_list)
new_list.remove(animal)
print(new_list)

我得到這個: ValueError : list.remove(x) : x not in list

你們會推薦我什么?

您從列表中隨機選擇了一個項目,然后將整個舊列表作為單個元素添加到新列表中。 這將創建一個二維列表,在最外面的列表中不包含任何字符串值。

調試此問題的最佳方法是在應用刪除之前打印您的列表以查看其中包含的內容:

print(new_list) # => [['cat', 'dog', 'duck', 'horse', 'snake']]

你注意到額外的[[]]嗎? 這是一個嵌套列表。

很可能,您的意圖是復制列表(此處使用切片運算符完成):

my_list = ["cat","dog","duck","horse","snake"]
import random
animal=(random.choice(my_list))
new_list = my_list[:]
new_list.remove(animal)
print(new_list)

除此之外,包含空格、刪除不必要的括號並將導入放在文件頂部是一種很好的做法。

最后, remove是一個線性操作,它可能會查看列表中的每個元素以找到要刪除的元素。 這可能看起來很愚蠢,但是當您開始處理數千或數百萬個項目的列表時,不必要地遍歷列表會成為一個大問題。

嘗試使用poprandom.randint選擇一個索引並將其從列表中一次性刪除(您仍然會因移動列表成員以填補空白而受到懲罰;從列表中間刪除並不理想):

import random

my_list = ["cat", "dog", "duck", "horse", "snake"]
new_list = my_list[:]
new_list.pop(random.randint(0, len(my_list) - 1))
print(new_list)

上面的答案是足夠的。 但是,我要指出您可以通過另一種方式調試代碼,即:

import pdb 

並在您的函數中調用:

pdb.set_trace()

這基本上允許您在調用堆棧幀處進入調試器。 我覺得它足智多謀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM