我有一个这种格式的file_text
the workers have human rights.
the women have rights.
the people have to work.
我有一些这样的术语
li = "human rights,the women"
我需要打印file_text的行,其中li中没有一个术语。为此,我尝试了
for line in file_text.splitlines():
for i in li.split(","):
if not i in line.casefold():
print(line)
这段代码给出了那些条款中没有的条款,可以告诉我为什么这里“不”不起作用?
答案 0 :(得分:1)
目前,只要行中的任何单词不,就会打印该行。您必须检查中没有任何字样。最简单的方法是使用' any'功能:
for line in file_text.splitlines():
if not any(i in line.casefold() for i in li.split(",")):
print(line)
如果您还需要知道该行中出现的单词,您可以在条件列表推导中收集这些单词,然后检查该列表是否为空:
for line in file_text.splitlines():
contained = [i for i in li.split(",") if i in line.casefold()]
if contained:
print(line, "contains", contained)
else:
print(line, "contains none of those words")
答案 1 :(得分:0)
算法背后的思路存在问题。想一想:
由于"逐个"迭代:
首先如果"人权"不符合要求它会被打印出来,所以"女人"将被打印。
然后排行"女人"将在不存在的情况下进行打印,以及#34;人权和#34;也将印刷线条。
为了避免这种情况,请尝试使用any
或计数器等其他方法来查看li
中的一个或两个元素。