1 omg21 OP list1 = ['print','lock','china','page'] for sub in list1: 能不能在这里直接删除元素? |
![]() | 2 wannafly 2016-10-30 18:20:33 +08:00 ![]() 正规(高效)的做法应该是在循环中把要删除的元素往前(后)交换, 并同时记录有效元素的最后(起始)索引, 循环结束了一次性删除待删除元素. |
![]() | 3 cheneydog 2016-10-30 18:20:57 +08:00 ![]() 你需要一个新的 list |
4 264768502 2016-10-30 18:21:07 +08:00 via Android ![]() list1 = [x for x in list1 if 'a' not in x] |
![]() | 5 billion 2016-10-30 18:26:28 +08:00 ![]() 楼主的代码有一股浓浓的 Java 的味道。 Python 有更加现代化的写法。  |
![]() | 6 billion 2016-10-30 18:27:55 +08:00 https://ooo.0o0.ooo/2016/10/30/5815caa3b24bd.png 图片又发不出来了吗? |
![]() | 7 bingxx 2016-10-30 18:40:52 +08:00 @billion groovy 也可以有优雅的写法。 def list1 = ['print','lock','china','page'] def list2 = list1.findAll{it?.contains("a")} println(list2) |
9 ferran 2016-10-30 18:48:46 +08:00 via Android 用迭代器遍历 |
11 omg21 OP @billion 没办法,以前 vb,java 用习惯了,一时半会儿改不过来。 再追加一个问题,如果 list1 = ['print','lock','china','g'],现在最后一个元素没有 a 了,我想在找到第一个有 a 的元素后不管后边的元素有没有 a 都保留下来,应该怎样做? |
13 luban 2016-10-30 19:20:21 +08:00 via iPhone 上面说的对,用迭代器。 java 里面使用 foreach 可以安全的 remove 元素 |
14 luban 2016-10-30 19:21:31 +08:00 via iPhone java8 的流使用 filter 过滤出需要的元素也很方便的 只会 java 路过 |
![]() | 15 forestyuan 2016-10-30 19:28:55 +08:00 正确的做法是从后往前删,就没有问题了。 也就是, for(i = n-1; i >= 0; i --),而不是 for(i = 0; i < n; i ++) |
16 mooncakejs 2016-10-30 19:30:44 +08:00 这种操作应该用 filter 而不是循环去删 |
![]() | 17 imn1 2016-10-30 19:46:33 +08:00 改变思维吧,循环过程中变更 list 长度是错误的思路 |
![]() | 18 1373569162 2016-10-30 19:56:13 +08:00 @omg21 1 2 def f(n, l): 3 for x in l: 4 if n in x: 5 return l[l.index(x):] list1 = ['print', 'lock', 'china', 'g'] list2 = f('a', list1) |
![]() | 19 Dd47964IP97bP8H4 2016-10-30 20:24:20 +08:00 如果我没理解错的话。。。 ```python list1 = ['print', 'lock', 'china', 'page'] list2 = [item for item in list1 if item.count('a') == 0] print(list2) # ['print', 'lock'] ``` |
![]() | 20 Dd47964IP97bP8H4 2016-10-30 20:25:20 +08:00 或者更直观的 list1 = ['print', 'lock', 'china', 'page'] list2 = [item for item in list1 if 'a' not in item] print(list2) |
![]() | 21 alittletrain 2016-10-30 22:10:39 +08:00 列表推导最 pythonic |
![]() | 22 lrh3321 2016-10-31 11:12:44 +08:00 还可以使用内置 filter 函数 list1 = ['print', 'lock', 'china', 'page'] list2 = filter(lambda item: 'a' not in item,list1) print(list2) |
![]() | 23 billion 2016-10-31 13:17:31 +08:00 @omg21 你的第二个需求 如果你的 list1 里面至少有一个元素包含字母 a, 那么可以这样写: list2 = list1[list1.index([x for x in list1 if 'a' in x][0]) + 1 :] 如果可能所以元素都不含 a,那么建议使用 for 循环。 |
![]() | 24 iyangyuan 2016-10-31 15:57:07 +08:00 倒着来 |