我正在尝试从列表中删除一个项目。通常非常明显,但问题是这些项目是对象,我想通过它们的属性之一删除它们。
有没有比我下面的更优雅的方法来做到这一点?
class Item:
def __init__(self, name, color):
self.name = name
self.type = type
if __name__ == "__main__":
myList = []
myList.append(Item("item1", "green"))
myList.append(Item("item2", "blue"))
# Try to remove object with name "item2"
index = None
for i, val in enumerate(myList):
if val.name == "item2"
del myList[i]
Run Code Online (Sandbox Code Playgroud)
您还可以使用内置方法filter(function, iterable)。
filter()将 a 应用于functionan 的每个元素iterable- 如果函数计算结果为True,则该元素位于生成的生成器中。如果函数计算结果为该False元素,则跳过该元素。
的结果filter(..)是一个生成器,因此您需要将其放入列表中(或者如果您只需要一次,则使用生成器结果)。
演示:
class Item:
def __init__(self, name, num):
self.name = name
self.num = num
def __repr__(self):
return f"({self.name} - {self.num})"
if __name__ == "__main__":
myList = []
for n in range(0,20):
myList.append(Item(str(n), n))
newList1 = list( filter(lambda x: x.num % 3 == 0, myList) )
print(myList)
print(newList1)
Run Code Online (Sandbox Code Playgroud)
输出:
# input to filter
[ (0 - 0), (1 - 1), (2 - 2), (3 - 3), (4 - 4), (5 - 5), (6 - 6), (7 - 7),
(8 - 8), (9 - 9), (10 - 10), (11 - 11), (12 - 12), (13 - 13), (14 - 14), (15 - 15),
(16 - 16), (17 - 17), (18 - 18), (19 - 19)]
# result of filter
[(0 - 0), (3 - 3), (6 - 6), (9 - 9), (12 - 12), (15 - 15), (18 - 18)]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7732 次 |
| 最近记录: |