任何人都可以告訴我如何從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