Python 如何在具有匹配字符串的嵌套列表中查找索引的最小值和最大值?
我有一个包含潮汐数据的文本文件,前几行是: 1月4日星期四,11.58,0.38米 1月4日星期四,16.95,0.73米 1月4日星期四,23.68,0.02米 1月5日星期五,6.48,0.83米 1月5日星期五,12.42,0.33米 等,并持续5天以上的数据 我已将此数据转换为嵌套列表,因此它现在打印为:Python 如何在具有匹配字符串的嵌套列表中查找索引的最小值和最大值?,python,Python,我有一个包含潮汐数据的文本文件,前几行是: 1月4日星期四,11.58,0.38米 1月4日星期四,16.95,0.73米 1月4日星期四,23.68,0.02米 1月5日星期五,6.48,0.83米 1月5日星期五,12.42,0.33米 等,并持续5天以上的数据 我已将此数据转换为嵌套列表,因此它现在打印为: [['Thursday 4 January', 11.58, 0.38], ['Thursday 4 January', 16.95, 0.73], ['Thursday 4 Janu
[['Thursday 4 January', 11.58, 0.38], ['Thursday 4 January', 16.95, 0.73], ['Thursday 4 January', 23.68, 0.02], ['Friday 5 January', 6.48, 0.83], ['Friday 5 January', 12.42, 0.33].....]
以此类推,对于文件中的每一行数据,每个列表的第一个索引是字符串中的日期,第二个和第三个索引是浮动的
对于当天具有匹配[0]索引的每个嵌套列表,我需要找到每个匹配嵌套列表的最低和最高浮动[2]索引潮汐高度,并将其打印到每天的屏幕上
例如:
Thursday 4 January: 0.02 meters at lowest and 0.73 meters at highest
Friday 5 January: 0.33 meters at lowest and 0.83 meters at highest
由于列表已按天排序,我想只计算匹配的名称,然后手动比较,例如“1月4日星期四”,因为有3个,我只需比较split_tides[0-2][2],找到最小值和最大值,然后每天重复。但我认为一定有一种方法可以自动比较具有匹配字符串的嵌套列表
谢谢你的帮助
编辑:文本文件的图像
首先,您可以使用groupby按日期分组,并按第三个索引高度排序。此处的示例代码:
from itertools import groupby
from operator import itemgetter
data = [['Thursday 4 January', 11.58, 0.38], ['Thursday 4 January', 16.95, 0.73], ['Thursday 4 January', 23.68, 0.02],
['Friday 5 January', 6.48, 0.83], ['Friday 5 January', 12.42, 0.33]]
for k, g in groupby(data, key=itemgetter(0)):
a = sorted(g, key=itemgetter(2))
print('{}: {} meters at lowest and {} meters at highest'.format(k, a[0][2], a[-1][2]))
输出:
Thursday 4 January: 0.02 meters at lowest and 0.73 meters at highest
Friday 5 January: 0.33 meters at lowest and 0.83 meters at highest
顺便说一下,在日期中使用groupby之前,请确保您的数据按日期排序
希望这将对您有所帮助,如果您还有其他问题,请发表评论: 首先,您可以使用groupby按日期分组,并按第三个索引高度排序。此处的示例代码:
from itertools import groupby
from operator import itemgetter
data = [['Thursday 4 January', 11.58, 0.38], ['Thursday 4 January', 16.95, 0.73], ['Thursday 4 January', 23.68, 0.02],
['Friday 5 January', 6.48, 0.83], ['Friday 5 January', 12.42, 0.33]]
for k, g in groupby(data, key=itemgetter(0)):
a = sorted(g, key=itemgetter(2))
print('{}: {} meters at lowest and {} meters at highest'.format(k, a[0][2], a[-1][2]))
data = [['Thursday 4 January', 11.58, 0.38], ['Thursday 4 January', 16.95, 0.73], ['Thursday 4 January', 23.68, 0.02], ['Friday 5 January', 6.48, 0.83], ['Friday 5 January', 12.42, 0.33]]
dic={'day':[],'min':[],'max':[]}
for i in data :
dic['day']+=[i[0]]
dic['min']+=[i[1]]
dic['max']+=[i[2]]
from collections import defaultdict
x = defaultdict(dict)
for i in dic['day']:
x[i]={'min':[],'max':[]}
for i in range(len(dic['min'])):
x[dic['day'][i]]['min']+=[dic['min'][i]]
x[dic['day'][i]]['max']+=[dic['max'][i]]
print(dict(x))
"""
structure data for future use
{'Friday 5 January': {'max': [0.83, 0.33], 'min': [6.48, 12.42]},
'Thursday 4 January': {'max': [0.38, 0.73, 0.02],
'min': [11.58, 16.95, 23.68]}}
"""
result =[]
for i in x:
result.append(r'{}: {} meters at lowest an {} meters at highest'.format(i,min(x[i]['min']),max(x[i]['max'])))
print(result)
"""output
['Thursday 4 January: 11.58 meters at lowest an 0.73 meters at highest', 'Friday 5 January: 6.48 meters at lowest an 0.83 meters at highest']
""""
输出:
Thursday 4 January: 0.02 meters at lowest and 0.73 meters at highest
Friday 5 January: 0.33 meters at lowest and 0.83 meters at highest
顺便说一下,在日期中使用groupby之前,请确保您的数据按日期排序
希望这将对您有所帮助,如果您还有其他问题,请发表评论: 下面是可以帮助您的代码片段
data = [['Thursday 4 January', 11.58, 0.38], ['Thursday 4 January', 16.95, 0.73], ['Thursday 4 January', 23.68, 0.02], ['Friday 5 January', 6.48, 0.83], ['Friday 5 January', 12.42, 0.33]]
dic={'day':[],'min':[],'max':[]}
for i in data :
dic['day']+=[i[0]]
dic['min']+=[i[1]]
dic['max']+=[i[2]]
from collections import defaultdict
x = defaultdict(dict)
for i in dic['day']:
x[i]={'min':[],'max':[]}
for i in range(len(dic['min'])):
x[dic['day'][i]]['min']+=[dic['min'][i]]
x[dic['day'][i]]['max']+=[dic['max'][i]]
print(dict(x))
"""
structure data for future use
{'Friday 5 January': {'max': [0.83, 0.33], 'min': [6.48, 12.42]},
'Thursday 4 January': {'max': [0.38, 0.73, 0.02],
'min': [11.58, 16.95, 23.68]}}
"""
result =[]
for i in x:
result.append(r'{}: {} meters at lowest an {} meters at highest'.format(i,min(x[i]['min']),max(x[i]['max'])))
print(result)
"""output
['Thursday 4 January: 11.58 meters at lowest an 0.73 meters at highest', 'Friday 5 January: 6.48 meters at lowest an 0.83 meters at highest']
""""
from pandas import DataFrame
data = [['Thursday 4 January', 11.58, 0.38], ['Thursday 4 January', 16.95, 0.73], ['Thursday 4 January', 23.68, 0.02],
['Friday 5 January', 6.48, 0.83], ['Friday 5 January', 12.42, 0.33]]
df = DataFrame.from_records(data)
df.columns = ["Date", "Value", "Height"]
df.groupby(['Date'])['Height'].max()
df.groupby(['Date'])['Height'].min()
输出:
日期
1月5日星期五0时83分
1月4日星期四0时73分
日期
1月5日星期五0时33分
0.02年1月4日星期四以下是对您有帮助的片段
from pandas import DataFrame
data = [['Thursday 4 January', 11.58, 0.38], ['Thursday 4 January', 16.95, 0.73], ['Thursday 4 January', 23.68, 0.02],
['Friday 5 January', 6.48, 0.83], ['Friday 5 January', 12.42, 0.33]]
df = DataFrame.from_records(data)
df.columns = ["Date", "Value", "Height"]
df.groupby(['Date'])['Height'].max()
df.groupby(['Date'])['Height'].min()
输出:
日期
1月5日星期五0时83分
1月4日星期四0时73分
日期
1月5日星期五0时33分
0.02年1月4日星期四你能保证某一天的结果总是在一起吗?@Austin是的,如果你是这个意思的话,这些天总是井然有序的,而且是组合在一起的。我将把这个文本文件添加到我的问题中。你能保证某一天的结果总是在一起吗?@Austin是的,如果你是这个意思的话,这些天总是按顺序分组的。我将把文本文件添加到我的问题中。