0

我需要从列表中步进一些元素(在本例中为 n)我还有另一个列表(o 列表)

n=['A','B','C','D','E']
o=['A','B','C','D','E','AS','sd','Z','R']
n.sort()

现在,如果我使用此代码:

for o in sorted(n): 

代码为'A','B','C','D','E'.

我需要运行 for 代码,但只需要运行'AS','sd','Z','R'项目。

类似的东西:运行 o 列表中的项目的代码,而没有 n 列表中的项目

4

4 回答 4

6

这仅在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']
于 2012-05-07T11:04:05.780 回答
1

我建议使用列表推导进行过滤并使用 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

编辑:按照评论中的建议添加了一个集合并使用生成器表达式。

于 2012-05-07T11:09:50.707 回答
0

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
于 2012-05-07T11:09:04.013 回答
0
n = ['A','B','C','D','E']
o = ['A','B','C','D','E','AS','sd','Z','R']
result = sorted(set(o) - set(n))
于 2012-05-07T11:31:33.577 回答