从两个.txt文件中打印特定名称

时间:2018-11-19 09:06:40

标签: python-3.x

在我的作业中出现了以下问题。首先是代码:

def read_docs(filename):
        with open(filename) as fh:
            return [x.strip() for x in fh.readlines()]

txt_file_1984 = read_docs('forenames_1984.txt')
txt_file_2015 = read_docs('fornames_2015.txt')
txt_file_all = txt_file_1984 + txt_file_2015

print('names, which were only popular in 1984:', end=' ')
for i in range(0, len(txt_file_1984)):
   print(txt_file_1984[i].replace("\n", ",  "), end=', ')

    print('\n')
print('names, which were only popular in 2015:', end=' ')
for j in range(0, len(txt_file_2015)):
    print(txt_file_2015[j].replace("\n", ",  "), end=', ')

print('\n')
print('popular names in both years:', end=' ')
for k in range(0, len(txt_file_all)):
    print(txt_file_all[k].replace("\n", ",  "), end=', ')

此处的代码给出以下输出:

names, which were only popular in 1984: Markus, Claudia, Thomas, . . . 

names, which were only popular in 2015: Lukas, Anna, David, . . .  

popular names in both years: Markus, Elisabeth, . . . 

总的来说,我对该输出感到满意,但是这里缺少一些内容,因为您可以看到此代码打印了文件“ txt_file_1984”中的所有名称,打印了文件“ txt_file_2015”中的所有名称,并且打印了文件中的所有名称。两个文本文件在一起。但这不是我想要的。

以下是我想要的详细信息:

我想打印出1984年以来所有在2015年不受欢迎的名字

在下一个方框中,我要打印所有在2015年流行的名称,但不是1984年。 (与上述相同,反之亦然)

“最后一个块”应显示一个输出,其中仅包含在 1984年和2015年流行的名称,仅应打印此名称。

希望您能理解我的意思。我在正确的道路上吗?我需要一些帮助,谢谢。

顺便说一句,不允许导入库

1 个答案:

答案 0 :(得分:0)

您的打印部分已放下。缺少的是在两个列表中都标识满足您当前要求的元素。 列表理解可以帮助您,建立新列表。

# popular only in 1984
popular_only_84 = [x for x in txt_file_1984 if x not in txt_file_2015]

# popular only in 2015
popular_only_15 = [x for x in txt_file_2015 if x not in txt_file_1984]

# popular in both
popular_both = [x for x in txt_file_2015 if x in txt_file_1984]

这些列表现在包含所需的元素,您可以使用以下命令简单地打印它们:

for name in popular_only_84:    # run through all elements in the list for 84
     # your printing code

因此在您的代码中,您可以使用以下命令打印一个列表:

print('names, which were only popular in 1984:', end=' ')
for name in popular_only_84:
    print(name.replace("\n", ",  "), end=', ')