在python中查找每行的最大和,并查找最大列表和最大列表计数的行号
“[1.0,0.5]”、“[0.5,0.5,0.5]”、“[0.5,0.5]” 我现在有对角线列表,我想找出每行中每个列表的和。输出应该是这样的在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.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行分隔,那么如何找到空行的最大值?你是说在第一个空行上停止?