如何从文本文件在Python中合并多个for循环

问题描述

我试图从文本文件中读取一些数据并多次打印,如下所示:

fruits.txt
apple
banana
orange


file = open(
    "D:/Python/fruits.txt","r")

f = []
for line in file:
    f.append(line.strip())

file.close()

for fruits in f:
    print(f"Sam likes {fruits}")
print()
for fruits in f:
    print(f"James does't like {fruits}")
print()
for fruits in f:
    print(f"Bob likes {fruits}")

除了上述方法之外,还有什么方法可以使我的代码更简洁,而不必为每个人重复for循环? 我想用文本文件中的数据打印每个人,然后继续下一个人,依此类推。 我已经在寻找任何解决方案,但仍然找不到最佳答案。希望有人能帮助我。谢谢

解决方法

names = ['Sam likes ','James doesn\'t like ','Bob likes ']

for name in names:
    for fruits in f:
        print(name + fruits)

类似的事情应该起作用。

,

我会这样

fruits = ['apple','banana','orange']

persons = ['Sam','Bob','James']
personsLikesFruits = ['Sam','Bob']

for person in persons:
    print()
    does_like_fruits = person in personsLikesFruits
    
    for fruit in fruits:
        print(f"{person} {'likes' if does_like_fruits else 'doesnt like'} {fruit}")

打印以下内容

Sam likes apple
Sam likes banana
Sam likes orange

Bob likes apple
Bob likes banana
Bob likes orange

James doesnt like apple
James doesnt like banana
James doesnt like orange

正如@tdelaney在评论中提到的那样,您可以使用with语句打开文件,因此不必手动close

with open("D:/Python/fruits.txt") as file:
    fruits = [line.strip() for line in file]

修改 使用@chepner提到的itertools.product

import itertools

for p,f in itertools.product(persons,fruits):
    does_like_fruits = p in personsLikesFruits
    print(f"{p} {'likes' if does_like_fruits else 'doesnt like'} {f}")

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...