猿问

从列表[重复]中删除项目时的奇怪结果

从列表[重复]中删除项目时的奇怪结果

我有一段代码:

numbers = range(1, 50)for i in numbers:
    if i < 20:
        numbers.remove(i)print(numbers)

但我得到的结果是:

[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49]

当然,我期望20以下的数字不会出现在结果中,我假设我做了一些错误的删除。


噜噜哒
浏览 741回答 4
4回答

喵喵时光机

话虽如此,为了进一步说明您的问题,如果您仔细考虑,您将始终希望删除索引0 20次:[1,2,3,4,5............50] &nbsp;^[2,3,4,5............50] &nbsp;^[3,4,5............50] &nbsp;^所以你可以做这样的事情:aList&nbsp;=&nbsp;range(50)i&nbsp;=&nbsp;0while&nbsp;i&nbsp;<&nbsp;20: &nbsp;&nbsp;&nbsp;&nbsp;aList.pop(0) &nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;+=&nbsp;1print&nbsp;aList&nbsp;#[21,&nbsp;22,&nbsp;23,&nbsp;24,&nbsp;25,&nbsp;26,&nbsp;27,&nbsp;28,&nbsp;29,&nbsp;30,&nbsp;31,&nbsp;32,&nbsp;33,&nbsp;34,&nbsp;35,&nbsp;36,&nbsp;37,&nbsp;38,&nbsp;39,&nbsp;40,&nbsp;41,&nbsp;42,&nbsp;43,&nbsp;44,&nbsp;45,&nbsp;46,&nbsp;47,&nbsp;48,&nbsp;49]希望能帮上忙。以下是不不良做法。编辑(更多):lis&nbsp;=&nbsp;range(50)lis&nbsp;=&nbsp;lis[20:]也会做好这份工作。EDIT 2(我很无聊):functional&nbsp;=&nbsp;filter(lambda&nbsp;x:&nbsp;x>&nbsp;20,&nbsp;range(50))

catspeake

从列表中删除项目很简单:从列表的末尾开始:li&nbsp;=&nbsp;range(1,15)print&nbsp;li,'\n'for&nbsp;i&nbsp;in&nbsp;xrange(len(li)-1,-1,-1): &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;li[i]&nbsp;<&nbsp;6: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;del&nbsp;li[i]print&nbsp;li结果[1,&nbsp;2,&nbsp;3,&nbsp;4,&nbsp;5,&nbsp;6,&nbsp;7,&nbsp;8,&nbsp;9,&nbsp;10,&nbsp;11,&nbsp;12,&nbsp;13,&nbsp;14]&nbsp;[6,&nbsp;7,&nbsp;8,&nbsp;9,&nbsp;10,&nbsp;11,&nbsp;12,&nbsp;13,&nbsp;14]

炎炎设计

我唯一想添加的东西(我本可以注释,但无法获得适当的代码格式)是,如果您提前声明了如下函数,那么您也可以为您的列表理解进行边处理:def checkRemoval(item):   # some processing here   return passed_inspection # Should be True / False.newList = [item for item in oldList if checkRemoval(item)]
随时随地看视频慕课网APP
我要回答