为了账号安全,请及时绑定邮箱和手机立即绑定

如何在python中找到相同的数字?

如何在python中找到相同的数字?

慕婉清6462132 2022-11-09 16:41:25
我在 Python 3.8.0 中遇到了这个程序的问题。我有两个文本文件(它们不能合并)。它们包含大约 1000 个数字,每个 15 位长(看起来像这样104988537042058)。我必须找到相同的数字。有人可以帮助我吗?我有点失落。我写了这个程序,但我可能在某个地方有错误。我是编程新手,找不到问题所在。A=open("A.txt",mode="r")B=open("B.txt",mode="r")out=open("Spol.txt", mode="w+")#print(A)#print(B)X=""for lineA in A:    for lineB in B:        if lineA==lineB:            X+=(lineA)        else:            ()        breakA.close()B.close()out.write(X)out.close()
查看完整描述

4 回答

?
FFIVE

TA贡献1797条经验 获得超6个赞

您的代码有两个问题,break第一次与 lineB 比较后将退出循环。另一个问题是当您读取文件时,您使用设置在文件开头的光标,一旦您读取文件,光标就位于末尾,因此每次尝试使用相同的光标时它都会为空再次处理而不重置光标。由于您似乎不关心重复项,因此我编写了以下代码,它应该可以完成您想要的操作:


with open("A.txt") as Af, open("B.txt") as Bf:

    numsA = {int(lineA.strip()) for lineA in Af}

    numsB = {int(lineB.strip()) for lineB in Bf}

    print(numsA & numsB)


查看完整回答
反对 回复 2022-11-09
?
温温酱

TA贡献1752条经验 获得超4个赞

迭代 B 的内部循环不起作用,或者更准确地说,对于 A 的第一行,它只工作一次。之后,它已经在 B 的末尾。啊,是的,break也是 - 将在第一次迭代后退出的内循环。你可能打算把它放在里面if

您可以在内部循环之前重新打开 B 。无论如何,这非常慢 - 尽管对于 1000 个数字仍然可以。最好将 A 的内容读入集合,然后遍历 B,寻找集合中存在的数字。

或者,如果您处于类 unix 环境中,只需cat A.txt B.txt| sort | uniq -d假设您在 A 或 B 中没有重复。如果您仍然可以在 shell 中执行此操作
(sort A.txt| uniq; sort B.txt | uniq) | sort | uniq -d


查看完整回答
反对 回复 2022-11-09
?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

您将不需要else. 将 break 移到条件内部,这样它只会在找到匹配项时才中断内部循环:


file_A=open("A.txt",mode="r")

file_B=open("B.txt",mode="r")

out=open("Spol.txt", mode="w+")


for lineA in A:

    for lineB in B:

        if lineA==lineB:

            X+=(lineA)

            break


A.close()

B.close()

out.write(X)

out.close()


查看完整回答
反对 回复 2022-11-09
?
炎炎设计

TA贡献1808条经验 获得超4个赞

假设每个文件中的每一行都是一个数字,您可以使用 python集合将所有行从第一个文件加载到一个集合,并将所有行从第二个文件加载到另一个集合,然后使用集合交集。例子:


# Reads into a set the content of file1 line by line

with open('file1.txt', 'r') as fs:

    file1_set = set(fs.readlines())


# Reads into a set the content of file2 line by line

with open('file2.txt', 'r') as fs:

    file2_set = set(fs.readlines())


# After both files contents (the numbers) are in sets

# then uses set intersection to find numbers appearing in both files

print(file1_set.intersection(file2_set))

最后一行将打印两个文件中出现的所有数字


查看完整回答
反对 回复 2022-11-09
  • 4 回答
  • 0 关注
  • 158 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信