在 Python 中从具有混合结构(列表和整数)的嵌套列表中删除一个元素
Remove an element from nested lists with mixed structures (lists and integers) in Python
考虑列表:
assigned = [4,8]
matching = [['B', [4, 5, 6]], ['C', [7, 8, 9]]]
我正在尝试使用以下代码删除给定的整数
for ii in range(len(assigned)):
while any(assigned[ii] in x for x in matching):
matching.remove(assigned[ii])
我这里有两个问题。
第一个是进入内部列表。
现在代码什么都不做,因为没有匹配项。
第二个问题,我试过这个:
t = ['B', [4, 5, 6]]
if any(4 in x for x in l2):
结果是错误的:
if any(4 in x for x in l2):
TypeError: 'in <string>' requires string as left operand, not int
有没有什么方法可以在不超过两行代码的情况下同时实现:在嵌套列表中找到匹配项并删除这些匹配项?
这是使用嵌套列表理解的一种方法:
matching = [[i[0], [j for j in i[1] if j not in assigned]] for i in matching]
print(matching)
输出:
[['B', [5, 6]], ['C', [7, 9]]]
如果您更喜欢使用 .remove()
,这是另一种列表理解方法
assigned = [4,8]
matching = [['B', [4, 5, 6]], ['C', [7, 8, 9]]]
[item[1].remove(x) for item in matching for x in item[1] if x in assigned]
print(matching)
# [['B', [5, 6]], ['C', [7, 9]]]
以上基本上是列表理解版本:
for item in matching:
for x in item[1]:
if x in assigned:
item[1].remove(x)
考虑列表:
assigned = [4,8]
matching = [['B', [4, 5, 6]], ['C', [7, 8, 9]]]
我正在尝试使用以下代码删除给定的整数
for ii in range(len(assigned)):
while any(assigned[ii] in x for x in matching):
matching.remove(assigned[ii])
我这里有两个问题。 第一个是进入内部列表。 现在代码什么都不做,因为没有匹配项。
第二个问题,我试过这个:
t = ['B', [4, 5, 6]]
if any(4 in x for x in l2):
结果是错误的:
if any(4 in x for x in l2):
TypeError: 'in <string>' requires string as left operand, not int
有没有什么方法可以在不超过两行代码的情况下同时实现:在嵌套列表中找到匹配项并删除这些匹配项?
这是使用嵌套列表理解的一种方法:
matching = [[i[0], [j for j in i[1] if j not in assigned]] for i in matching]
print(matching)
输出:
[['B', [5, 6]], ['C', [7, 9]]]
如果您更喜欢使用 .remove()
assigned = [4,8]
matching = [['B', [4, 5, 6]], ['C', [7, 8, 9]]]
[item[1].remove(x) for item in matching for x in item[1] if x in assigned]
print(matching)
# [['B', [5, 6]], ['C', [7, 9]]]
以上基本上是列表理解版本:
for item in matching:
for x in item[1]:
if x in assigned:
item[1].remove(x)