如何从python中的范围中排除列表?

时间:2015-07-09 10:03:57

标签: python list range

所以我根据适合特定条件的设定范围内的值创建了一个列表,现在稍后我要检查同一范围内的所有值,但不包括放入此列表的值..这可能吗?如果没有,还有其他选择吗?

filled_columns = []
for b in range(0,7):
    if board[0,b] == 1 or board[0,b] == 2:
        filled_columns.append(b)
for b in range(0,7) #but excluding values from "filled_columns" list

4 个答案:

答案 0 :(得分:1)

如果我正确理解您的问题,您可以使用列表理解将项目复制到新列表中,过滤掉您不想要的内容。例如:

list1 = range(20)
filterlist = [4,6,8,9,14]

filtered=[item for item in list1 if item not in filterlist]
print filtered

因此,对于您的示例,请将最后一行替换为:

checklist = [b for b in range(0,7) if b not in filled_columns]
for b in checklist:
    # do stuff with b

答案 1 :(得分:1)

有可能,您可以检查另一个for循环中的值b是否存在于filled_list中,如果不存在,请执行您的逻辑,如果有,请&# 39;什么都不做。

示例 -

filled_columns = []
for b in range(0,7):
    if board[0,b] == 1 or board[0,b] == 2:
        filled_columns.append(b)
for b in range(0,7):
    if b not in filled_columns:
        #do your logic

或者为了获得更好的性能,您可以将fill_columns创建为set,搜索操作是常量时间。

示例 -

filled_columns = set()
for b in range(0,7):
    if board[0,b] == 1 or board[0,b] == 2:
        filled_columns.add(b)
for b in range(0,7):
    if b not in filled_columns:
        #do your logic

答案 2 :(得分:1)

您只想要一个没有填充的列表吗?除非我误解了你的问题,否则这可以在一次通过中完成,没有额外的列表,更不用说集合了

emptycols = [b for b in range(7) if board[0,b] != 1 and board[0,b] !=2]

答案 3 :(得分:1)

您也可以使用套装。

a  = list(set(range(7)) - set(filled_columns))