[问题] Python List增减 (已解决 非常感谢)

楼主: dream0830 (异影)   2016-05-16 13:31:00
各位好
我是python新手,原本是写C为主
最近在尝试python,有些问题想请教各位
我设定了一个List
想用for去做筛选,筛选出来我就把它放到另一个List中
目前的架构大概是这样 (简化版本)
A = [1,2,3,4,5]
B = []
for i in range(len(A)):
if A[i] % 2 ==0
B.append(A[i])
A.remove(A[i])
但是我发现筛选到最后 一定会出现
IndexError: list index out of range
我猜想这部分应该是因为我移除了List元素后,
A的长度缩减,原本A[5]可能变成A[4],而i继续递增,导致检查不到
我尝试找相关的解法,但是抓不到关键字
拜托各位指教了,非常感谢
新增问题
请问若以iterator的方式
要怎么做双重循环以上的筛选呢
一般使用C的时候 因为是用阵列位置,所以就是用i , i+1就可以了
难道python可以直接抽一组出来?
例如我要把上面 A的元素 相加为6的元素组起来放到B里面
直觉我是用
for i ...
for j=i+1 ...
一一去比对
可是照下面O大的方法,直接提取元素应该是不能这样+1的吧?
谢谢各位不吝指教 (鞠躬
作者: OGCKM (只有神知道的世界)   2016-05-16 13:50:00
试试用iterator而不是用元素的阵列位置范例:http://goo.gl/sNXo8F
作者: mikapauli (桜花)   2016-05-16 13:52:00
做1个复制,不要改变A你的例子可以直接list(map((1).__sub__,filter((2).__rmod__, map((1).__sub__, A))))list(filter((2).__rmod__, A))
作者: bigpigbigpig (To littlepig with love)   2016-05-16 16:36:00
https://ideone.com/byJO6e请勿在循环内任意新增、删除、修改 iterable 的内容现在你删掉的是 list 内的元素,尚有序可循,改天如果删掉dict或set的元素,可能会找不到应该在其中的元素(更动了hash),可参阅 Fluent Python Ch 3。dict{'a','b','c','d','e'}就很有可能,无论如何,Fluent Python 指出应避免在循环中更动 iterable
作者: mikapauli (桜花)   2016-05-17 01:52:00
建议你可以直接描述你要做的事情。你举的两个例子有点太简化以致于有很多不知道是不是特例的情况。像是A的元素不会重复吗
作者: bigpigbigpig (To littlepig with love)   2016-05-17 02:39:00
list comprehension 可以一步做到 map 和 filter组合运用的功能,其实就是我前面推文给的程式码片段你看过用list comprehension写的巴斯卡三角会很感动新增问题:from itertools import combinationsA = [1, 2, 3, 4, 5]B = [ tuple(c) for c in combinations(A,2)if sum(c) == 6 ]
作者: s06yji3 (阿南)   2016-05-18 18:38:00
你这是逻辑问题,跟python没有太大的关系https://goo.gl/bH5Lat
作者: bibo9901 (function(){})()   2016-05-18 20:17:00
你可以sort完 用两个指标 一个从左扫 另一个从右扫扫到相撞就解决了
作者: s06yji3 (阿南)   2016-05-18 23:33:00
此指标非比指标,他的意思是用i,j。binary searchsorry,不是binary search
作者: bibo9901 (function(){})()   2016-05-19 00:19:00
如楼上所说. 用 index 就能代表指标
作者: eight0 (欸XD)   2016-05-19 03:21:00
B = [(i, 6 - i) for i in A if i < 3 and 6 - i in A]
作者: s06yji3 (阿南)   2016-05-19 10:43:00
楼上好厉害QQ
作者: kanggy ((我还在,只是热情不再))   2016-05-19 16:22:00
e大好厉害 O.O
作者: ray60110 (Yen)   2016-05-19 21:57:00
一行解真的很猛
作者: s860134 (s860134)   2016-05-20 01:52:00
真的突破盲点 用相反角度来完成

Links booklink

Contact Us: admin [ a t ] ucptt.com