Python 将元素从列表中排序

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']

我需要从列表中逐步删除一些元素(在本例中为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']
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))