【发布时间】:2014-08-13 17:01:17
【问题描述】:
我有两组对象,s1 和 s2,它们的长度不同。我想根据这个伪代码就地修改这两组:
for a1 in s1:
for a2 in s2:
if a1.name == a2.name:
# insert some stuff into database
# remove a2 from s2 and a1 from s1
s1 和 s2 现在只有 s1[n].name != s2[n].name 的元素。当然,从集合中删除项目应该不会影响正在进行的迭代的其余部分。
我意识到解决这个问题的方法不止一种。我正在努力想出一种“python 风格”的方式(即不使用嵌套的 for 循环):map?筛选?拉姆达?列表理解?算法性能并不是特别重要,因为集合非常小——每个元素不超过 100 个,但通常每个元素大约 10 个。
【问题讨论】:
-
考虑到它们的大小,为什么要就地修改集合?
-
我推荐使用第三组,因为修改你正在迭代的集合是危险的——你不会在开车的时候换轮子,对吗?
-
事实证明,使用新的 set() 执行此操作太复杂了,因为我需要保留 a1.name != a2.name 且不重复的元素。
标签: python map filter lambda list-comprehension