在python中查找每行的最大和,并查找最大列表和最大列表计数的行号

在python中查找每行的最大和,并查找最大列表和最大列表计数的行号,python,numpy,Python,Numpy,“[1.0,0.5]”、“[0.5,0.5,0.5]”、“[0.5,0.5]” 我现在有对角线列表,我想找出每行中每个列表的和。输出应该是这样的 "[1.0, 0.0]","[0.5, 0.5, 0.5]","[0.0, 0.0]" "[0.0, 0.0]","[0.0, 0.0, 0.0]","[0.0, 0.0]" "[0.0, 0.0]","[1.0, 1.0, 1.0]","[0.0, 0.0]" "[0.0, 0.0]","[0.5, 0.5, 0.5]","[1.0, 1.0]

“[1.0,0.5]”、“[0.5,0.5,0.5]”、“[0.5,0.5]”

我现在有对角线列表,我想找出每行中每个列表的和。输出应该是这样的

"[1.0, 0.0]","[0.5, 0.5, 0.5]","[0.0, 0.0]"

"[0.0, 0.0]","[0.0, 0.0, 0.0]","[0.0, 0.0]"

"[0.0, 0.0]","[1.0, 1.0, 1.0]","[0.0, 0.0]"

"[0.0, 0.0]","[0.5, 0.5, 0.5]","[1.0, 1.0]"

"[0.0, 0.0]","[0.0, 0.0, 1.0]","[0.5, 0.5]"

我该怎么做呢?

从底部开始的第二行中的总和应该是2。刚刚想出了一个快速而肮脏的解决方案:

1.5

1.5

0

3

1.5

1
输出:

from ast import literal_eval
with open("in.csv") as f:
    for ind, line in enumerate(f, 1):
        if line.strip():  # catch empty lines
            print(ind,max(sum(literal_eval(sub.strip('"'))) for sub in line.rstrip().split('",')))
import csv
from ast import literal_eval
with open("in.csv") as f:
    reader = csv.reader(f)
    for ind, row in enumerate(reader,1):
        if row: # only needed if you have empty rows
            print(ind, max(sum(literal_eval(sub)) for sub in row))
import csv
from ast import literal_eval
from operator import itemgetter
with open("in.csv") as f:
    reader = csv.reader(f)
    totals = ((ind, max(sum(literal_eval(sub))for sub in row))
              for ind, row in enumerate(reader, 1) if row)
    print(max(totals,key=itemgetter(1)))
使用csv模块使我们的生活更加轻松,因为它可以正确地进行拆分:

(1, 1.5)
(2, 1.5)
(3, 0.0)
(4, 3.0)
(5, 2.0)
(6, 1.0)
输出:

from ast import literal_eval
with open("in.csv") as f:
    for ind, line in enumerate(f, 1):
        if line.strip():  # catch empty lines
            print(ind,max(sum(literal_eval(sub.strip('"'))) for sub in line.rstrip().split('",')))
import csv
from ast import literal_eval
with open("in.csv") as f:
    reader = csv.reader(f)
    for ind, row in enumerate(reader,1):
        if row: # only needed if you have empty rows
            print(ind, max(sum(literal_eval(sub)) for sub in row))
import csv
from ast import literal_eval
from operator import itemgetter
with open("in.csv") as f:
    reader = csv.reader(f)
    totals = ((ind, max(sum(literal_eval(sub))for sub in row))
              for ind, row in enumerate(reader, 1) if row)
    print(max(totals,key=itemgetter(1)))

安全地计算表达式节点或包含Python文本或容器显示的Unicode或Latin-1编码字符串。提供的字符串或节点只能由以下Python文本结构组成:字符串、数字、元组、列表、dicts、boolean和None

这可以用于安全地评估包含来自不受信任源的Python值的字符串,而无需自己解析这些值。它不能计算任意复杂的表达式,例如涉及运算符或索引的表达式

考虑到你有一个csv文件,那么使用哪一个选项是很容易的

如果需要所有行的最大值,我们可以使用生成器表达式从每行中获取最大值,然后使用operator.itemgetter根据元组的第二个元素(即最大值)获取最大值:

(1, 1.5)
(2, 1.5)
(3, 0.0)
(4, 3.0)
(5, 2.0)
(6, 1.0)
输出:

from ast import literal_eval
with open("in.csv") as f:
    for ind, line in enumerate(f, 1):
        if line.strip():  # catch empty lines
            print(ind,max(sum(literal_eval(sub.strip('"'))) for sub in line.rstrip().split('",')))
import csv
from ast import literal_eval
with open("in.csv") as f:
    reader = csv.reader(f)
    for ind, row in enumerate(reader,1):
        if row: # only needed if you have empty rows
            print(ind, max(sum(literal_eval(sub)) for sub in row))
import csv
from ast import literal_eval
from operator import itemgetter
with open("in.csv") as f:
    reader = csv.reader(f)
    totals = ((ind, max(sum(literal_eval(sub))for sub in row))
              for ind, row in enumerate(reader, 1) if row)
    print(max(totals,key=itemgetter(1)))
或者,如果文件和输出中确实有这些空行:

with open('test.csv') as file:
    for line in file:
        print(max(sum(eval(string)) for string in eval(line)))

它们是行还是列表?在每行中都有列表,它们是列表的字符串表示形式?第三行的最大值是多少?你说的字符串表示法是什么意思?我的意思是你在交替使用列表和行,你有什么字符串或列表?这些行是一个文件吗?我有一个csv文件,其中包含上述列表行。我逐字复制并粘贴了您的问题输入。如果你的输入文件不是这样的,你应该编辑你的问题,使示例输入反映实际输入。当有几行被空白隔开时,如何找到最大值line@abd,我不明白你的意思,代码忽略了空行。谢谢@padraic cunninghamYes,它工作得非常好。我想问一下,如果这个文件中有多个输入被balnk行分隔,那么如何找到空行的最大值?你是说在第一个空行上停止?