如何不使用循环从列表中移除两个元素?含#及未知前序元素场景
列表操作问题解答
问题1:不使用循环从列表中移除两个元素
其实有几种简单的方法,不用写显式的for/while循环就能搞定:
知道元素索引的情况:直接用
del语句一次性处理。比如你的列表是my_list = [1,2,3,4,5],想移除索引1和3的元素(也就是2和4),可以这么写:del my_list[1], my_list[2] # 注意删除第一个元素后,后面元素的索引会前移,所以第二个索引要减1如果是连续的索引,用切片更省事:
del my_list[1:3] # 移除索引1到2的元素(切片是*左闭右开*规则哦)知道元素值的情况:如果清楚要移除的元素值,可以用列表推导式快速过滤掉目标元素(虽然是隐式迭代,但没有写显式循环)。比如要移除列表里的
2和4:my_list = [1,2,3,4,5] to_remove = {2,4} my_list = [x for x in my_list if x not in to_remove]要是你只想移除第一个匹配的目标元素,那可以先找到索引再用
del,比如:my_list = [1,2,3,2,4] # 先找两个元素的索引,注意从后往前删避免索引偏移 idx1 = my_list.index(2) idx2 = my_list.index(4) if idx1 < idx2: del my_list[idx2] del my_list[idx1] else: del my_list[idx1] del my_list[idx2]
问题2:移除#符号及其前序元素(不使用循环)
这个其实不难,核心就是先定位#的位置,然后一次性删掉它和前面的元素就行:
假设你的列表是A = ['A', 'B', '#', 'C'],可以这么写代码:
try: hash_pos = A.index('#') # 先判断#不是第一个元素,不然没前序元素可删 if hash_pos > 0: # 切片覆盖前序元素和#本身,一次性删除 del A[hash_pos-1 : hash_pos+1] except ValueError: # 列表里没找到#的话,就啥也不做 pass
解释下逻辑:
A.index('#')会找到列表中第一个#的索引位置- 用
del配合切片hash_pos-1 : hash_pos+1,就能一次性把前序元素和#都删掉 - 加
try-except是为了防止列表里没有#时抛出报错,让代码更健壮
内容的提问来源于stack exchange,提问作者user12867493
相关产品推荐
相关产品推荐

