我的问题是,如何只打印尚未打印的商品?
(它只是代码的一部分)。
我有一个包含15个项目的数组,必须进行洗牌,然后只打印e/2
的数量。我已尝试使用数组中的项目索引创建第二个列表,然后仅打印列表中存在的索引和项目。如果索引不在我的列表中,那么它将不会被打印。每次打印后,项目的索引都会从我的化妆清单中删除,因此不会再次打印。
def tryitem(self,c,list1):
if c not in lista:
c = random.randint(0, 14)
self.tryitem(c,list1)
else:
pass
...some code...
list1 = list(range(15))
for i in range(int(e/2)):
c = random.randint(0, 14)
print(c)
self.tryitem(c,list1)
but= ttk.Button(root, text=str(item.myItem[c][0])+" x"+str(item.myItem[c][1]))
but.place(anchor=W,x=20,y=wysokosc,width=170,height=25)
wysokosc+=25
list1.remove(item.myItem[c][2])
项目的索引位于myItem[c][2]
列
首先,这种方法不能正常工作,因为它打印一些项目两到三次,并且在一些打印之后我得到了错误
ValueError:list.remove(x):x不在列表中
答案 0 :(得分:0)
我会尝试回答您的第一个问题,假设您有一个列表,并且您希望在某种迭代中打印它的项目,并且您想要跟踪已经打印过的项目为了不再打印它们。
最简单的方法是使用字典。 每次打印项目时,都要将其索引添加到字典中。 每次要打印项目时,请检查他的索引是否在字典中,如果没有则打印。
import random
e = random.randint(1, 30)
lst = [random.randint(1, 1000) for _ in range(100)]
printed = {} # To save if we perinted this index already
def print_next_values():
for x in range(int(e/2)): # print (e/2) items
index = random.randint(0, len(lst) - 1)
# Try to fetch new indexes until we get a new index we havn't printed yet
while index in printed:
index = random.randint(0, len(lst) - 1)
print(lst[index]) # Printing the item
printed[index] = True # Adding the item index to the dictionary
while len(printed.keys()) < len(lst):
print_next_values()
在这里,您可以看到1000个项目的列表,这些项目将以部分打印(每次迭代e / 2,直到没有更多项目)。 在我们打印项目之前,我们检查他是否已经打印过。如果没有,我们打印出来。