任何人都可以告诉我如何从Python2.7/Django1.6.2列表中删除项目,同时保持索引完好?从列表中删除值/项目,但保留索引完好
我希望能够多次遍历列表并删除使用原始索引的项目。我认为我在下面试图实现的是相当普遍的,但我不知道它的名字。
或者更好的方法来解决以下问题?
原始列表
images = ['A.jpg', 'B.jpg', 'C.jpg', 'D.jpg', 'E.jpg']
用于索引上面会0, 1, 2, 3, 4
如果使用例如images.pop(2)
它似乎删除了索引和值。当多次循环访问列表以删除不同的项目时,这会导致问题,原因是原始声明的索引和值不匹配。
class SurveyWizardOne(SessionWizardView):
def get_context_data(self, form, **kwargs):
context = super(SurveyWizardOne, self).get_context_data(form, **kwargs)
if self.steps.current == '5':
display_image = random.choice(images)
context.update({'display_image': display_image})
if display_image == 'A.jpg':
images.pop(0)
elif display_image == 'B.jpg':
images.pop(1)
elif display_image == 'C.jpg':
images.pop(2)
elif display_image == 'D.jpg':
images.pop(3)
elif display_image == 'E.jpg':
images.pop(4)
因此,在上述情况下,如果display_image
是C.jpg
它就会使用images.pop(2)
更新列表
images = ['A.jpg', 'B.jpg', 'D.jpg', 'E.jpg']
名单上面的指数现在是0, 1, 2, 3
“POP操作” (我认为)
if self.steps.current == '6':
display_image = random.choice(images)
context.update({'display_image': display_image})
if display_image == 'A.jpg':
images.pop(0)
elif display_image == 'B.jpg':
images.pop(1)
elif display_image == 'C.jpg':
images.pop(2)
elif display_image == 'D.jpg':
images.pop(3)
elif display_image == 'E.jpg':
images.pop(4)
但是,如果第二次通过列表display_image
骑自行车是D.jpg
,我应该使用images.pop(2)
,但我的解决办法是images.pop(3)
,我能想到的这个问题是一些方法来从列表中删除该值的解决方案,所以不能再次选择,但要保持索引完好,以便我可以继续循环并逐个删除。谁能告诉我这可能是怎么完成的?
感谢;-)
使用全部五张图像后会发生什么?你想再次通过吗?在相同的顺序,还是相差一个?有很多更好的方法可以做到这一点(对指数进行硬编码是一个不好的举措),但这种方法将取决于您的目标。 – jonrsharpe 2014-09-05 11:05:52
当他们浏览完所有5张图片后,他们会简单地移动到SessionWizardView的下一页(用于将表格分割成多页),这是一个多项选择问题。 – Deepend 2014-09-05 11:08:59