首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从二维数组python中删除引号

从二维数组python中删除引号
EN

Stack Overflow用户
提问于 2018-07-19 04:30:04
回答 3查看 756关注 0票数 3

我目前正在尝试执行计算具有大指数的幂的代码,而不是计算它们,而是计算它们的日志。我有一个包含1000行的file。每行包含两个用逗号分隔的iteger。当我试图从数组中删除引号时,我被卡住了。我尝试了许多方法,但都没有奏效。下面是我的代码:

来自myLib的名为split()的函数接受两个参数,其中一个是列表,第二个是拆分原始列表的元素数。然后这样做,并将较小的列表附加到新列表。

代码语言:javascript
复制
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

这是我的数组的样子:

代码语言:javascript
复制
[['519432,525806\n'], ['632382,518061\n'], ... ['172115,573985\n'], ['13846,725685\n']]

我试图找到一种绕过2d数组的方法,并尝试:

代码语言:javascript
复制
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

但是输出看起来像这样:

代码语言:javascript
复制
['519432,525806\n', '632382,518061\n', '78864,613712\n', ...

而处于当前状态的数字不能被认为是整数或浮点数,所以这也不起作用……

代码语言:javascript
复制
[int(i) for i in lst]

数组本身的预期输出将如下所示,因此我可以选择其中一个数字并对其进行处理:

代码语言:javascript
复制
[[519432,525806], [632382,518061], [78864,613712]...

我真的很感谢你的帮助,因为我对python和编程还很陌生。

谢谢您抽时间见我。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-07-19 05:01:00

这是你缺失的部分:

代码语言:javascript
复制
fArr = [[int(num) for num in line.rstrip("\n").split(",")] for line in fArr] 

在这里,rstrip("\n")将从一行中删除尾随的\n字符,然后在,上拆分字符串,这样每个字符串都将成为一个列表,该行中的所有整数都将成为该列表的元素,但作为字符串。然后,我们可以对每个列表元素调用int()函数,将它们转换为int数据类型。

如果你不想导入额外的库,下面的代码应该可以完成这项工作。

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2018-07-19 04:38:24

这段代码将把你的数组转换成一维整数数组:

代码语言:javascript
复制
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)

打印:

代码语言:javascript
复制
[519432, 525806, 632382, 518061]

对于2D输出,您可以使用以下命令:

代码语言:javascript
复制
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)

这将打印:

代码语言:javascript
复制
[[519432, 525806], [632382, 518061]]
票数 1
EN

Stack Overflow用户

发布于 2018-07-19 04:40:31

代码语言:javascript
复制
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)

输出:

代码语言:javascript
复制
[[519432, 525806], [632382, 518061], [78864, 613712]]

为了使new_list扁平化

代码语言:javascript
复制
from functools  import reduce
reduce(lambda x,y: x+y,new_list)
print(new_list)

输出:

代码语言:javascript
复制
[519432, 525806, 632382, 518061, 78864, 613712]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51410509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档