嵌套 _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
跳出内部循环。
我有一份名单
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
跳出内部循环。