从Python的二维数组中删除引号

3
我目前正在尝试执行计算大指数幂的代码,而不是对它们进行计算,而是记录它们的对数。我有一个包含1000行的文件。每行包含两个用逗号分隔的整数。我卡在了尝试从数组中删除引号的地方。我尝试了许多方法,但都没有成功。这是我的代码:
myLib中的函数split()需要两个参数,其中一个是列表,另一个是要将原始列表分成多少个元素。然后将其执行并将较小的列表附加到新列表中。
import math
import myLib

i = 0
record = 0
cmpr = 0
with open("base_exp.txt", "r") as f:
    fArr  = f.readlines()
    fArr  = myLib.split(fArr, 1)
    #place get rid of quotes
    print(fArr)
    while i < len(fArr):
        cmpr = int(fArr[i][1]) * math.log(int(fArr[i][0]))
        if cmpr  > record:
            record = cmpr
            print(record)
        i = i + 1

这是我的数组的样子:

[['519432,525806\n'], ['632382,518061\n'], ... ['172115,573985\n'], ['13846,725685\n']]

我试图绕过二维数组,尝试了以下方法:

i = 0
record = 0
cmpr = 0
with open("base_exp.txt", "r") as f:
    fArr  = f.readlines()
    #fArr  = myLib.split(fArr, 1)
    fArr = [x.replace("'", '') for x in fArr]
    print(fArr)
    while i < len(fArr):
        cmpr = int(fArr[i][1]) * math.log(int(fArr[i][0]))
        if cmpr  > record:
            record = cmpr
            print(i)
        i = i + 1

但输出看起来像这样:

['519432,525806\n', '632382,518061\n', '78864,613712\n', ...

当前状态下的数字不能被视为整数或浮点数,因此这也不起作用...

[int(i) for i in lst]

对于数组本身的期望输出应该是这样的,这样我就可以选择其中一个数字并进行操作:

[[519432,525806], [632382,518061], [78864,613712]...

我非常感谢你的帮助,因为我对Python和编程还很陌生。

谢谢你抽出时间。


逗号代表小数点还是仅用于千位分隔符等? - user3483203
原始文件中的逗号分隔了两个整数,这是一个好观点。我会编辑我的问题。 - Matej Novosad
所以预期输出是什么?包含数字的单个列表吗? - mad_
考虑使用[list(line.split(' ')) for line in StringIO(fArr)]来从数组中删除引号。 - Eskapp
如之前所提到的,@user3483203,是的,但我可以重新调整我的代码来使用普通数组。 - Matej Novosad
显示剩余4条评论
4个回答

2

使用numpy便利的loadtxt函数,您可以避免所有问题:

import numpy as np
arr = np.loadtxt('p099_base_exp.txt', delimiter=',')
arr

array([[519432., 525806.],
       [632382., 518061.],
       [ 78864., 613712.],
       ...,
       [325361., 545187.],
       [172115., 573985.],
       [ 13846., 725685.]])

如果你需要一个一维数组:
arr.flatten()
# array([519432., 525806., 632382., ..., 573985.,  13846., 725685.])

哇,我甚至不知道这个存在。这是什么黑魔法啊?它说没有名为numpy的模块。你介意和我分享源代码吗? - Matej Novosad
你需要运行pip install numpy来安装numpy,它不是内置的。 - user3483203

1

这段代码将把您的数组转换为整数的一维数组:

from itertools import chain

arr = [['519432,525806\n'], ['632382,518061\n']]

new_arr = [int(i.strip()) for i in chain.from_iterable(i[0].split(',') for i in arr)]
print(new_arr)

输出:

[519432, 525806, 632382, 518061]

对于2D输出,您可以使用以下内容:

arr = [['519432,525806\n'], ['632382,518061\n']]

new_arr = [[int(i) for i in v] for v in (i[0].split(',') for i in arr)]
print(new_arr)

这将打印:

[[519432, 525806], [632382, 518061]]

1
这是你失落的一部分:

fArr = [[int(num) for num in line.rstrip("\n").split(",")] for line in fArr] 

在这里,rstrip("\n")将从行中删除尾随的\n字符,然后字符串将被拆分为,,以便每个字符串都成为一个列表,并且该行中的所有整数都将成为该列表的元素,但作为字符串。然后,我们可以对每个列表元素调用int()函数将它们转换为int数据类型。
如果您不想导入其他库,下面的代码应该可以完成工作。
i = 0
record = 0
cmpr = 0
with open("base_exp.txt", "r") as f:
    fArr = f.readlines()
    fArr = [[int(num) for num in line.rstrip("\n").split(",")] for line in fArr] 
    print(fArr)
    while i < len(fArr): 
        cmpr = fArr[i][1] * math.log(fArr[i][0])
        if cmpr > record:
            record = cmpr
            print(i) 
        i = i + 1

0
new_list=[]
a=['519432,525806\n', '632382,518061\n', '78864,613712\n',]
for i in a:
    new_list.append(list(map(int,i.split(","))))

print(new_list)

输出:

[[519432, 525806], [632382, 518061], [78864, 613712]]

为了将new_list展平
from functools  import reduce
reduce(lambda x,y: x+y,new_list)
print(new_list)

输出:

[519432, 525806, 632382, 518061, 78864, 613712]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接