gpt4 book ai didi

Python 列表用字符串排序

转载 作者:行者123 更新时间:2023-11-28 22:24:58 25 4
gpt4 key购买 nike

我有一个 sh**y 字符串列表,其中包含按小时显示的天气信息,它是:

bad_list =['00:00',  '-2°C', '-6°C', '320°13 Km/h', 'N/A', '74%', '-6°C', '1025,0mb', '',  
'01:00', '-1°C', '-3°C', '320°6 Km/h', 'N/A', '75%', '-5°C', '1024,0mb', '',
'02:00', '-3°C', '-5°C', '270°6 Km/h', 'N/A', '86%', '-5°C', '1023,0mb', '',
.....(skipped hours from 03 till 09)
'09:04', '9°C', '5°C', '290°35 Km/h', 'N/A', '66%', '3°C', '1022,0mb', '',
'10:00', '9°C', '5°C', '290°37 Km/h', 'N/A', '62%', '2°C', '1022,0mb', '',
'10:27', '10°C', '6°C', '280°39 Km/h', 'N/A', '58%', '2°C', '1023,0mb', '',
'11:02', '11°C', '11°C', '290°35 Km/h', 'N/A', '54%', '2°C', '1022,0mb', '',
'11:10', '12°C', '12°C', '290°37 Km/h', 'N/A', '47%', '1°C', '1022,0mb', '',
.....(skipped)
'23:00', '3°C', '3°C', 'N/A', '52%', '-6°C', '1020,0mb', '',
]

问题是在列表中,小时字符串像示例一样杂乱,有'10:00' 和'10:27'。我正在尝试的是每小时(从 00:00 到 23:00)收集 temp(一小时后的下一个索引字符串)。该列表中有超过 24 个字符串表示一个小时(以及相应的天气信息!)。所以我想找到一个小时的第一次出现,然后从列表中获取下一个索引作为相应的温度:

unique_time = ['00:','01:','02:','03:','04:','05:','06:','07:','08:','09:','10:','11:','12:','13:','14:','15:','16:',
'17:','18:','19:','20:','21:','22:','23:']

sorted_time_list = next(x for x in unique_time if x in bad_list) #not working

并获取bad_list中sorted_time_list对应的+1索引字符串。我知道这听起来很难看,但我只想在 24 小时内获取临时字符串(bad_list 中小时字符串后的第二个元素)。

我知道这听起来有点不清楚。如果需要更多详细信息,请拍我:)

最佳答案

将您的项目分成 9 个项目(使用 grouper iterator ),然后按每组的小时数分组:

from itertools import groupby, zip_longest

def grouper(iterable, n, fillvalue=None):
args = [iter(iterable)] * n
return zip_longest(*args, fillvalue=fillvalue)

by_hour = groupby(grouper(bad_list, 9), lambda g: g[0][:2])

temp_list = [(hour, next(entries)[1]) for hour, entries in by_hour]

这会生成一个 (hour, temp) 元组列表,其中会生成给定小时的第一个温度。

给定数据的演示:

>>> from itertools import groupby, zip_longest
>>> def grouper(iterable, n, fillvalue=None):
... args = [iter(iterable)] * n
... return zip_longest(*args, fillvalue=fillvalue)
...
>>> by_hour = groupby(grouper(bad_list, 9), lambda g: g[0][:2])
>>> [(hour, next(entries)[1]) for hour, entries in by_hour]
[('00', '-2°C'), ('01', '-1°C'), ('02', '-3°C'), ('09', '9°C'), ('10', '9°C'), ('11', '11°C'), ('23', '3°C')]

关于Python 列表用字符串排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45904739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com