我正在迭代Python中的元组列表,并且如果它们符合某些条件,我会尝试删除它们.
for tup in somelist:
if determine(tup):
code_to_remove_tup
Run Code Online (Sandbox Code Playgroud)
我应该用什么代替code_to_remove_tup?我无法弄清楚如何以这种方式删除项目.
我有一个列表,我试图从中删除重复的项目.我正在使用python 2.7.1所以我可以简单地使用set()函数.但是,这会重新排序我的列表.对于我的具体情况,这是不可接受的.
下面是我写的一个函数; 这样做.但是我想知道是否有更好/更快的方式.对此也有任何意见,将不胜感激.
def ordered_set(list_):
newlist = []
lastitem = None
for item in list_:
if item != lastitem:
newlist.append(item)
lastitem = item
return newlist
Run Code Online (Sandbox Code Playgroud)
上面的函数假设没有项目是None,并且项目是有序的(即,''a','a','a','b','b','c','d '])
上面的函数将['a','a','a','b','b','c','d']作为['a','b','c','d'返回].
考虑:
fooList = [1, 2, 3, 4] # Ints for example only, in real application using objects
for foo in fooList:
if fooChecker(foo):
remove_this_foo_from_list
Run Code Online (Sandbox Code Playgroud)
具体如何foo从列表中删除?请注意,我仅使用整数,在实际应用程序中有一个任意对象列表.
谢谢.
有许多类似的问题(这里是一个),但我见过的解决方案使用列表理解或过滤器,这些方法生成一个新的列表(或Python 3.x中的过滤器的新迭代器).有些解决方案可以通过修改列表本身来删除实例(就像这样,这个),这些将是我的最后手段.但是,我想看看是否有一个更优雅("Pythonic",另一个问题称之为)这样做的方式.
为什么我无视生成新列表的解决方案:我正在迭代列表集合,Python允许我修改我正在迭代的"当前"列表,但不是完全替换它:
>>> ll= [[1,2,3], [2,3,4], [4,5,6]]
>>> for l in ll:
if l[0] == 2:
l = [10]
>>> ll
[[1, 2, 3], [2, 3, 4], [4, 5, 6]] #replacement didn't happen
>>> for l in ll:
if l[0] == 2:
l.remove(2)
>>> ll
[[1, 2, 3], [3, 4], [4, 5, 6]] #modification succeeded
Run Code Online (Sandbox Code Playgroud)