在python中重叠和枚举

瑞亚·雷迪

给定两个文件我们需要从两个质数文件中找到与数据重叠的所有数字。

为了检查素数,我们需要开发一个名为 check_prime 的函数并使用它。

我的代码:


import math
def is_prime(num):
    if num == 1:
        return False
    if num == 2:
        return True
    for i in range(2,int(math.sqrt(num))+1):
        if num % i == 0:
            return False
    return True

one = []

theFile = open("One.txt", "r")
array = []
for val in theFile:
    array.append(val)

print(array)

theFile = open("Two.txt", "r")
array1 = []
for val in theFile:
    array1.append(val)

print(array1)

for i in array:
   one.append(i)


print(one)
诺米米奇

你快到了,但这里是你的代码中缺少的部分:

1)从文件中读取

为了避免编写两次相同的代码来打开两个文件,以及处理两个以上的文件,我们可以遍历文件名而不是分别打开每个文件

所以而不是:

theFile = open("One.txt", "r")
#[...]
theFile = open("Two.txt", "r")

我们可以使用:

file_names = ['One.txt', 'Two.txt']
for i in file_names:
    theFile = open(i, "r")

2)从文件中提取数字

然后提取文本文件中的值。每个文件中的数字列表被导入为一个列表,其中包含一个带有数字的字符串。

所以我们需要做两件事:

1) 从列表中提取字符串 2) 读取列表中以逗号分隔的每个字符串编号。

如果你这样做:

for val in theFile:
    array.append(val)

您只会将一个包含一个字符串的列表附加到您的array.

在代码中,您将创建两个列表:arrayarray1后来只有通过循环array这在你的看跌期权名单one只列出从数据array列表,而不是用array1在所有。没什么好担心的,我也得到有时糊涂之间array[1]以及array1如果我的名字几个列出1,2,3结尾。

所以我们可以这样做:

for val in theFile:
    array = array + val.split(",")

我们使用+是因为我们希望所有数字字符串都在一个列表中,而不是一个包含多个列表的列表(您可以尝试将其替换为:array = array.append(val.split(","))并且您会看到您得到一个包含列表的列表,但我们想要的是所有数字字符串来自一个列表中的所有文件,因此最好将列表中的元素连接到一个列表中。

既然您拥有包含文本文件中所有字符串数字的数组列表,您需要将它们转换为整数,以便您可以运行出色的is_prime函数。

因此,我们创建了第二个列表,我将array2在其中将字符串数字存储为整数而不是字符串。

您想要的最终输出是两个文本文件中唯一质数的列表,因此我们array2在附加之前检查该数字是否已经存在

for nbrs in array:
    if int(nbrs) not in array2:
        array2.append(int(nbrs))

差不多好了!从那以后,您已经完成了其余的工作:

您需要将所有唯一数字传递array2给您的is_prime函数以检查它们是否为质数。

我们将is_prime函数(TrueFalse的结果存储到列表中is_nbr_prime

is_nbr_prime = []
for i in array2:
    is_nbr_prime.append(is_prime(i))

现在,因为您想返回数字本身,我们需要找到素数的索引以从中提取它们array2,这些索引是 中True的索引is_nbr_prime

idx = [i for i, val in enumerate(is_nbr_prime) if val] #we get the index of the values that are True in is_nbr_prime list  
unique_prime_nbrs = [array2[i] for i in idx] # we pass the index to array2 containing the list of unique numbers to take out only prime numbers.

就是这样,您在列表中有您唯一的质数unique_prime_nbrs

如果我们把所有的步骤放在两个函数中,最终的代码是:

def is_prime(num):
    if num == 1:
        return False
    if num == 2:
         return True
    for i in range(2,int(math.sqrt(num))+1):
         if num % i == 0:
            return False
    return True

def check_prime(file_names):
    array = []
    array2 = []
    for i in file_names:
        theFile = open(i, "r")
        for val in theFile:
            array = array + val.split(",")    
        for nbrs in array:
            if int(nbrs) not in array2:
                array2.append(int(nbrs))

    is_nbr_prime = []
    for i in array2:
        is_nbr_prime.append(is_prime(i))

    idx = [i for i, val in enumerate(is_nbr_prime) if val]    
    unique_prime_nbrs = [array2[i] for i in idx]

    return unique_prime_nbrs

要调用该函数,我们需要传递一个文件名列表,例如:

file_names = ['One.txt', 'Two.txt']
unique_prime_nbrs = check_prime(file_names)
print(unique_prime_nbrs)
[5, 7, 13, 17, 19, 23]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章