Python 将元素从列表中排序
我需要从列表中逐步删除一些元素(在本例中为n) 我还有另一个列表(o列表) 现在,如果我使用此代码:Python 将元素从列表中排序,python,Python,我需要从列表中逐步删除一些元素(在本例中为n) 我还有另一个列表(o列表) 现在,如果我使用此代码: for o in sorted(n): 代码是为'A'、'B'、'C'、'D'、'E'运行的。 我需要运行for代码,但只运行'AS'、'sd'、'Z'、'R'项 类似于:为o列表中的项目运行代码,而不运行n列表中的项目仅当o没有重复项时,此操作才有效: n = ['A','B','C','D','E'] o = ['A','B','C','D','E','AS','sd','Z','R']
for o in sorted(n):
代码是为'A'、'B'、'C'、'D'、'E'运行的。
我需要运行for代码,但只运行'AS'、'sd'、'Z'、'R'
项
类似于:为o列表中的项目运行代码,而不运行n列表中的项目仅当
o
没有重复项时,此操作才有效:
n = ['A','B','C','D','E']
o = ['A','B','C','D','E','AS','sd','Z','R']
a = sorted(set(o) - set(n))
# a == ['AS', 'R', 'Z', 'sd']
否则,请使用以下命令:
n = ['A','B','C','D','E']
o = ['A','B','C','D','E','AS','sd','Z','R', 'AS']
s = set(n)
a = sorted(elem for elem in o if elem not in s)
# a == ['AS', 'AS', 'R', 'Z', 'sd']
Set有这样的操作
n=['A','B','C','D','E']
o=['A','B','C','D','E','AS','sd','Z','R']
for ab in set(o).difference(set(n)):
print ab
我建议使用a进行筛选,使用sorted()进行排序:
for item in sorted(element for element in n if element not in o):
print item
如果n
趋于较大,则首先创建一个集合会更快:
forbidden = set(o)
for item in sorted(element for element in n if element not in forbidden):
print item
编辑:添加了一个集合,并使用生成器表达式代替注释中的建议。请注意,您的if条件在每次迭代时都会创建一个新的
集合。最好在循环之外计算集合(n)
,这唯一的缺点是性能--通过(而不是先创建一个集合并对集合进行查找)没有这么快。您可以省去[]
排序的与生成器表达式一起工作良好添加排序的()
调用,这将是完美的。这将不是完美的,因为集合
不保留重复项。@gnibbler集合是有序的,但它不是包含的顺序。@Moooeeep,我向您提出一个链接“集合对象是不同哈希对象的无序集合。”@gnibbler很明显,这是哈希的顺序,不是吗?@gnibbler当然你是对的,显然我对哈希映射的细节有一个误解。一定是把它与C++混淆了。std::set
,后者是作为二元搜索树实现的。@gnibbler:正确且同意我们知道在排序(n)中对o进行迭代
将覆盖列表的内容o
。
n = ['A','B','C','D','E']
o = ['A','B','C','D','E','AS','sd','Z','R']
result = sorted(set(o) - set(n))
n = ['A','B','C','D','E']
o = ['A','B','C','D','E','AS','sd','Z','R']
result = sorted(set(o) - set(n))