嵌套 _for: for: if not:_ 没有按预期工作

Nested _for: for: if not:_ not working as expected

我有一份名单

import random

nameList = ['BOB', 'JOE', 'DAN', 'CHRIS', 'JAMES']
randList = []
removeList = ['JOE', 'CHRIS']

for i in range(20):
    randInt = random.randint(0, 4)
    randFloat = random.uniform(0, 4)
    randList.append(nameList[randInt] + '_' + str(randFloat))

# print(randList)

并且我能够打印出一个新列表,该列表仅包含包含 removeList 中的字符串的项目:

for name in nameList:
    for item in randList:
        if name in item:
            print('Hello ' + name + ' • ' + item)

但是,我正在尝试做 相反的事情:打印出 [的项目列表=35=] 包含来自 removeList

的字符串

为什么以下尝试没有产生我预期的结果(以及获得预期结果的最有效方法是什么):

for name in nameList:
    for item in randList:
        if not name in item:
            print('Hello ' + name + ' • ' + item)

for name in nameList:
    for item in randList:
        if name in item:
            pass
        else:
            print('Hello ' + name + ' • ' + item)

感谢您的帮助

使用any()函数。

for name in nameList:
    if not any(name in item for item in randList):
        print('Hello', name)

在这种情况下没有要打印的 item,因为 none 项匹配。

您的代码打印了所有不匹配的项目,但仍然可能有一个匹配的项目——直到您检查完所有这些项目后才能判断。

试试这个:

print([name for name in nameList if name not in removeList])

如果您只是想获取不在删除列表中但在 nameList 中的名称列表,我对 randList 在您的代码中所做的事情感到有点困惑?您能否提供所需输出的示例?

您可以避免将您不感兴趣的名称放入 rand 列表中。因此,当您构建随机列表时,如果名称不在删除列表中,则仅附加名称

import random

nameList = ['BOB', 'JOE', 'DAN', 'CHRIS', 'JAMES']
removeList = ['JOE', 'CHRIS']
randList = []
for _ in range(20):
    rand_name = random.choice(nameList)
    if rand_name not in removeList:
        randList.append(f"{rand_name}_{random.uniform(0,4)}")

for element in randList:
    print(f"Hello {element.split('_')[0]} • {element}")

输出

HEllo DAN • DAN_2.6129066804909606
HEllo BOB • BOB_1.2555220335071193
HEllo JAMES • JAMES_2.528215786926702
HEllo JAMES • JAMES_2.6441433380568147
HEllo BOB • BOB_3.343545146025066
HEllo BOB • BOB_1.4079854325792525
HEllo BOB • BOB_0.7971949952849191
HEllo JAMES • JAMES_1.067955225004117
HEllo BOB • BOB_2.8990933365663545
HEllo JAMES • JAMES_1.1432812287737648
HEllo DAN • DAN_3.0836648897302616
for item in randList:
    for name in nameList:
         if name in item and name not in removeList:
             print(name)
             break

如果您反转循环(首先迭代 randList),您可以在找到符合条件的名称时 break 跳出内部循环。