从二维数组中删除引号 python
Removing quotes from 2D array python
我目前正在尝试执行代码来评估具有大指数的幂而不计算它们,而是计算它们的日志。我有一个包含 1000 行的 file。每行包含两个用逗号分隔的迭代器。我被困在我试图从数组中删除引号的地方。我尝试了很多 none 有效的方法。这是我的代码:
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', ...
并且当前状态下的数字不能被视为整数或浮点数,所以这也不起作用...:[=18=]
[int(i) for i in lst]
数组本身的预期输出如下所示,因此我可以选择其中一个数字并使用它:
[[519432,525806], [632382,518061], [78864,613712]...
非常感谢您的帮助,因为我对 python 和一般编程还是很陌生。
感谢您的宝贵时间。
此代码段会将您的数组转换为一维整数数组:
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]
对于二维输出,你可以使用这个:
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]]
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]
您可以通过简单地使用 numpy
's 方便的 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.])
这是你遗漏的部分:
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
我目前正在尝试执行代码来评估具有大指数的幂而不计算它们,而是计算它们的日志。我有一个包含 1000 行的 file。每行包含两个用逗号分隔的迭代器。我被困在我试图从数组中删除引号的地方。我尝试了很多 none 有效的方法。这是我的代码:
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', ...
并且当前状态下的数字不能被视为整数或浮点数,所以这也不起作用...:[=18=]
[int(i) for i in lst]
数组本身的预期输出如下所示,因此我可以选择其中一个数字并使用它:
[[519432,525806], [632382,518061], [78864,613712]...
非常感谢您的帮助,因为我对 python 和一般编程还是很陌生。
感谢您的宝贵时间。
此代码段会将您的数组转换为一维整数数组:
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]
对于二维输出,你可以使用这个:
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]]
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]
您可以通过简单地使用 numpy
's 方便的 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.])
这是你遗漏的部分:
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