python - 删除列表中具有特定字符的元素
问题描述
list = [['4H', '5D', '7C', 'AC'], ['AC', 'AS', 'AS']]
for i in list:
for j in i:
if j[0] == 'A':
i.remove(j)
print(list)
我本质上是在尝试删除两个列表中以“A”作为每个元素的第一个索引的所有元素。当我尝试使用上面的代码时,我似乎得到了[['4H', '5D', '7C'], ['AS']]
How can I get [['4H', '5D', '7C'], []]
instead?
解决方案
问题是您在迭代列表时修改了列表。想象第二个子列表是['AS1', 'AS2', 'AS3']
i = 0 => AS1 => deletes, that moves AS2 to first box
i = 1 => AS3 => deletes
您需要以另一种方式修改列表
修改当前列表
values = [['4H', '5D', '7C', 'AC'], ['AS', 'AS', 'AS']] for sublist in values: tmp_vals = list(sublist) sublist.clear() sublist.extend(elt for elt in tmp_vals if elt[0] != 'A')
创建新的
values = [['4H', '5D', '7C', 'AC'], ['AS', 'AS', 'AS']] values = [[elt for elt in sublist if elt[0] != 'A'] for sublist in values]
推荐阅读
- xamarin.forms - System.InvalidOperationException: 'No 'id' member found on type
- python - 如何通过请求通过循环元刷新?
- sql - SQL通过ID从另一个表中获取列的总和
- vue.js - 在Vue中制作链接组件的链接列表组件
- c# - 为什么 MVVM 模式不适用于 ChartValues?
- php - 属性“id”取自非对象
- python - Python elementtree 获取 XML CDATA
- javascript - 如果节点属性与功能混淆,如何突出显示错误,反之亦然。例如,显示 `node.innerText()` 或 `node.toLowerCase` 的错误
- java - 如何打破某些语句的扫描仪并为其他语句运行
- r - 如何在r中选择具有特定值的行?