如何打印尚未打印的列表中的项目?

时间:2017-05-27 17:10:23

标签: python

我的问题是,如何只打印尚未打印的商品? (它只是代码的一部分)。 我有一个包含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不在列表中

1 个答案:

答案 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,直到没有更多项目)。 在我们打印项目之前,我们检查他是否已经打印过。如果没有,我们打印出来。