从二维数组python中删除引号

时间:2018-07-18 20:30:04

标签: python arrays multidimensional-array quotes

我目前正在尝试执行对具有大指数的幂进行赋值的代码,而不对其进行计算,而是对其进行记录。我有一个file,其中包含1000行。每行包含两个由逗号分隔的iteger。我被困在试图从数组中删除引号的位置。我尝试了许多方法,但都无济于事。这是我的代码:

来自myLib的

函数split()需要两个argumanet,其中一个是列表,第二个是分割原始列表的元素数。然后这样做,并将较小的列表追加到新列表中。

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']]

我试图找到一种解决2d数组的方法并尝试:

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和一般编程还是很陌生。

谢谢您的时间。

4 个答案:

答案 0 :(得分:2)

您只需使用numpy's便捷的 loadtxt 函数,就可以避免 all 的所有问题:

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.])

答案 1 :(得分: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]]

答案 2 :(得分: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

答案 3 :(得分: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]