检查Python for循环的所有迭代中是否存在某些内容

时间:2016-10-11 00:21:10

标签: python

我正在尝试查找变量是列表列表中任何列表的元素。如果它是任何一个元素,那么我正在使用continue移动到下一个块。如果它不是任何列表的成员,那么我想在列表列表中创建一个新列表,并将该变量作为该列表的唯一条目。

我问的原因是因为if语句被满足,或者没有满足其他迭代,两种情况都会看到相同的结果,这是一个超过这个块的延续。

for group in groups:
    if point in group:
        continue
    else:

        # if point not an element of any group, 
          create group in groups with variable as only element

更新

这会有用吗?有没有更简洁的方法呢?

for group in groups:
    if point in group:
        groupCheck = 1
    else:
        pass
if not groupCheck:
    # Create a new list including point

4 个答案:

答案 0 :(得分:4)

反转您的逻辑,并使用else循环的for子句创建新组。

for group in groups:
  if point in group:
    break
else:
  create_new_group(point)

或者只使用any()

if not any(point in group for group in groups):
  create_new_group(point)

答案 1 :(得分:1)

为什么不将if语句放在循环之外?

found = False

for group in groups:
    if point in group:
        found = True
        break

if not found:
    groups.append([point])

答案 2 :(得分:1)

创建一个功能。

def check_matches(point, groups):
    for group in groups:
        if point in group:
            return true
    return false

if not check_matches(point, groups):
    groups.append([point])

你可以这么简单,取决于你想要用它做什么,或者将它构建成更复杂的功能:

def get_groups(point, groups):
    if not check_matches(point, groups):
        groups.append([point])
    return groups

groups = get_groups(point, groups)

你可以在这里做一些简单的列表理解,但鉴于你对Python的明显新意,我不推荐它们。这是让你感到困惑并在将来犯更多错误的可靠方法。

答案 3 :(得分:1)

尝试使用内置的any()功能。

if not any(point in group for group in groups):
    groups.append([point])