Python列表与字符串
问题描述:
排序我有几个小时的天气信息串的SH **Ÿ列表,在这里它是:Python列表与字符串
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)收集临时(一小时后的下一个索引字符串)。一个小时内有超过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')]
+1
你是我的英雄!感谢百万队友! –
答
我在python初出茅庐,我尝试用自己的方法来解决这个问题。 其次是我的代码。
final_result={}
for x, y in enumerate(unique_time):
if (y in bad_list):
final_result[y]=bad_list[x+1]
print(final_result)
在你的例子中,第一个元素总是时间,数据以9个为一组,所以'bad_list [1 :: 9]'怎么样? –