我有一个带有名称的文本文件names.txt
(每行有一个名字)。我想在if子句中使用相同时间的所有名称。这是我做的:
with open("names.txt") as f: # reading to list
names = f.read().splitlines() #names contains all names in a list
for name in names:
if "name" == "John":
do something...
此代码的问题是,对于names.txt中的每个名称,都会触发for循环。但我真正想做的是用更长的if子句代替for循环:
if (name == "John") or (name2 == "John") or (name3 == "John"): # ...
do something...
现在的问题是我不知道如何制作if子句,因为names.txt中的项目(名称)的数量有所不同。使用len()
我可以得到长度,但我怎么能做这样的if子句?如果特定name
匹配John
,我需要在变量中使用此name
以获取更多内容。我希望你明白我的意思。我不想为每个名字都进行for循环。我想用一个名字制作一个if子句。一旦名称匹配,我需要存储在变量中的名称才能使用它。
答案 0 :(得分:1)
这对python来说非常完美。就这样做:
if "John" in names:
do something...
答案 1 :(得分:0)
您可以使用此功能,例如:
if any(name == "John" for name in names):
do something...
编辑:只有一件事:这个if
(或塞巴斯蒂安建议的那个)做你先说的话“[...]现在问题是我不知道如何制作if子句因为金额项目[...]“。
无论如何,我会假设你没有匹配确切的名字,因为它没有意义,除非你想要计算它们,你可以这么做:
johns = names.count("John")
现在,如果您想要包含 John
的名称,那么您可以这样做:
with open("names.txt") as f:
for name in (n for n in f if "John" in n):
do some stuff...
答案 2 :(得分:0)
如果您想在找到第一个"John"
时停止,可以break
循环:
for name in names:
if name == "John": # note no quotes around name
# do something...
break
这意味着if
块的内容只运行一次。
虽然您可以预先测试是否会评估True
(例如if "John" in
或if any(...)
),但将意味着足够的循环要查找"John"
或到达列表末尾的名称。
如果您想了解您正在使用的"John"
,您也可以使用该索引:
for index, name in enumerate(names):
if name == "John":
print("Found '{0}' at index {1}.".format(name, index))