使用我的解决方案无法完成 METAR 数据列表的输出

Complete output of a list of METAR data not possible with my solution approach

得到了这样的列表data = ['KSFO 072156Z 28020KT 10SM CLR 18/06 A3006 RMK AO2 PK WND 28027/2149 SLP177 T01780061']

并想将其输出到命令行,如下所示:

KSFO            072156Z         28020KT
10SM            CLR             18/06
A3006           RMK             AO2
PK              WND             28027/2149
T01780061

我试过了

x = 0
l = []
for i in data:
    x = x + 1
    l.append(i)
    if x == 3:

        print(f"{l[0]}\t\t{l[1]}\t\t{l[2]}")

        l = []
        x = 0

但问题是这个解决方案忽略了结果。在这个例子中,“T01780061”没有用我的解决方法输出。

如果列表“数据”的长度不能除以 3,我的解决方案将不再有效,或者可以执行但不会输出所有内容,如上例所示

我知道这个问题的解决方案可能非常简单,但我已经尝试了数周但无法提出合理的解决方案

提前致谢

亲切的问候

您可以这样做的一种方法是单独打印每个单词,只需将 end 参数更改为 print 取决于您是否在行尾。例如:

data = ['KSFO 072156Z 28020KT 10SM CLR 18/06 A3006 RMK AO2 PK WND 28027/2149 SLP177 T01780061']

for s in data:
    words = s.split()
    for i, w in enumerate(words):
        print(w, end='\n' if i % 3 == 2 else '\t')

或者,您可以遍历 wordsrange 并打印当前 3 个值的 joined 字符串:

for s in data:
    words = s.split()
    for i in range(0, len(words), 3):
        print('\t'.join(words[i:i+3]))

两种情况下的输出都是:

KSFO    072156Z 28020KT
10SM    CLR     18/06
A3006   RMK     AO2
PK      WND     28027/2149
SLP177  T01780061   

这似乎可以实现您的需求:

from more_itertools import chunked

data = ['KSFO 072156Z 28020KT 10SM CLR 18/06 A3006 RMK AO2 PK WND 28027/2149 SLP177 T01780061']
for line in chunked(data[0].split(), 3):
    print('\t'.join(line))

KSFO    072156Z 28020KT
10SM    CLR 18/06
A3006   RMK AO2
PK  WND 28027/2149
SLP177  T01780061

more_itertools 可通过 pip install more-itertools 获得)