Python 板


LINE

各位好 我是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的吧? 谢谢各位不吝指教 (鞠躬 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.195.114.31
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1463376663.A.97F.html
1F:推 OGCKM: 试试用iterator而不是用元素的阵列位置 05/16 13:50
2F:→ OGCKM: 范例:http://goo.gl/sNXo8F 05/16 13:50
原来可以直接取用元素,谢谢你
3F:→ mikapauli: 做1个复制,不要改变A 05/16 13:52
这部分我另一部分有这样做,但是这边是真的要删光她XD 谢谢你
4F:→ mikapauli: 你的例子可以直接 05/16 15:00
5F:→ mikapauli: list(map((1).__sub__, 05/16 15:00
6F:→ mikapauli: filter((2).__rmod__, map((1).__sub__, A)))) 05/16 15:00
7F:→ mikapauli: list(filter((2).__rmod__, A)) 05/16 15:01
这...看不懂QQ,我先查一下filter跟map好了
8F:→ bigpigbigpig: https://ideone.com/byJO6e 05/16 16:36
9F:→ bigpigbigpig: 请勿在回圈内任意新增、删除、修改 iterable 的内容 05/16 16:38
可以问一下为什麽不行吗? pop不是也是删掉用的?
10F:→ bigpigbigpig: 现在你删掉的是 list 内的元素,尚有序可循,改天 05/16 22:15
11F:→ bigpigbigpig: 如果删掉dict或set的元素,可能会找不到应该在其中 05/16 22:16
12F:→ bigpigbigpig: 的元素(更动了hash),可参阅 Fluent Python Ch 3。 05/16 22:18
意思是 我的A是list[1,2,3,4,5],删除1,2 还不会影响 但是若 A是 dict {1,2,3,4,5},删除1,2 可能会导致3,4,5一并找不到吗?
13F:→ bigpigbigpig: dict{'a','b','c','d','e'}就很有可能,无论如何, 05/16 22:36
14F:→ bigpigbigpig: Fluent Python 指出应避免在回圈中更动 iterable 05/16 22:38
好的,谢谢,那我修改看看好了,现在看来Python的for用途好像跟C的for差有点多ORZ
15F:→ mikapauli: 建议你可以直接描述你要做的事情。你举的两个例子有点 05/17 01:52
16F:→ mikapauli: 太简化以致於有很多不知道是不是特例的情况。像是A的元 05/17 01:56
17F:→ mikapauli: 素不会重覆吗 05/17 01:56
我想说简化後比较好描述QQ,然後我自己在测试也比较简单这样 重复性基本上不会,我把它简化成1,2,3 而实际上可能是(1,1,2,3,9),(1,1,3,4,7),(2,1,3,4,7)之类的组合 因为有做序号区分,第一个就是序号 序号可能一样,但序号一样时,其他属性不会完全重复 第二个我是想要做分组 例如 A= [1,2,3,4,5] B=[] 我想要让A里面可以相加为6的一组 筛选後的结果变成 A = [3] B = [(1,5),(2,4)] 如果我用C写就是会用两个FOR去比对 1先跟2345配对 找到5 取出 (1,5)放到B 2跟剩下的 34配对 找到4 取出 (2,4)放到B 3没人配了 只好留着 根据B大的建议,不要修改A,所以目前是想这样弄,但是觉得怪怪的ORZ For i in A: For j in A: if i+j ==6 B.append(i,j) else NewA.append(i) 查了map和filter那些的用法,看起来好像可以用map 但还在研究到底怎麽做
18F:→ bigpigbigpig: list comprehension 可以一步做到 map 和 filter 05/17 02:39
19F:→ bigpigbigpig: 组合运用的功能,其实就是我前面推文给的程式码片段 05/17 02:40
了解,原来big大的那种用法叫做list comprehension (笔记 我觉得list comprehension看起来好像是做筛选+简单地处理 函式部分应该可以独立写吧? 如果很长的函式摆进去看起来会很长吧XD
20F:→ bigpigbigpig: 你看过用list comprehension写的巴斯卡三角会很感动 05/17 07:34
喔喔喔喔喔 我查到了 看起来好像可以拿来改成我想要弄得,感谢
21F:→ bigpigbigpig: 新增问题:from itertools import combinations 05/17 19:19
22F:→ bigpigbigpig: A = [1, 2, 3, 4, 5] 05/17 19:19
23F:→ bigpigbigpig: B = [ tuple(c) for c in combinations(A,2) 05/17 19:20
24F:→ bigpigbigpig: if sum(c) == 6 ] 05/17 19:20
OAO,我自己改了半天还是不会动ORZ 感谢 B = [ tuple(c) for c in combinations(A,2) if sum(c) == 6 ] 所以这边是 combinations(A,2) 先列出 1,2 2,3 3,4 4,5 1,3 2,4 3,5 1,4 2,5 1,5 然後用if sum(c)=6 筛选掉不符合的部分 最後再用tuple定义剩下的C型态,然後放进B 不知道我这样理解有没有错
25F:推 s06yji3: 你这是逻辑问题,跟python没有太大的关系 05/18 18:38
26F:→ s06yji3: https://goo.gl/bH5Lat 05/18 18:38
这种解法我还真想不到 直觉会想用两个for 非常感谢你提供另一种思考方式
27F:→ bibo9901: 你可以sort完 用两个指标 一个从左扫 另一个从右扫 05/18 20:17
28F:→ bibo9901: 扫到相撞就解决了 05/18 20:18
这样也不错耶,可以节省扫描次数,不过python也有指标?
29F:推 s06yji3: 此指标非比指标,他的意思是用i,j。binary search 05/18 23:33
30F:推 s06yji3: sorry,不是binary search 05/18 23:37
31F:→ bibo9901: 如楼上所说. 用 index 就能代表指标 05/19 00:19
哦哦 了解 i从头j从尾这样 我一个问题解法好多哦XDDD 谢谢大家各种建议 ※ 编辑: dream0830 (123.195.114.31), 05/19/2016 01:22:16
32F:推 eight0: B = [(i, 6 - i) for i in A if i < 3 and 6 - i in A] 05/19 03:21
33F:推 s06yji3: 楼上好厉害QQ 05/19 10:43
看懂後觉得好强OAO ※ 编辑: dream0830 (123.195.114.31), 05/19/2016 15:20:47
34F:推 kanggy: e大好厉害 O.O 05/19 16:22
35F:推 ray60110: 一行解真的很猛 05/19 21:57
36F:→ s860134: 真的突破盲点 用相反角度来完成 05/20 01:52







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Soft_Job站内搜寻

TOP