首页 > 解决方案 > 删除列表中具有特定字符的元素

问题描述

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?

标签: python

解决方案


问题是您在迭代列表时修改了列表。想象第二个子列表是['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]
    

推荐阅读