首页 > 解决方案 > 使用多个 for 循环增加迭代器时遇到问题

问题描述

我是 Python 的初学者,我决定尝试一个脚本来帮助我完成我作为天气观察员的兼职工作。本质上,我有一个观察列表,并且我已经编写了正则表达式来收集我需要的信息并使用 xlwings 将其放入电子表格中。我有一个部分观测列表,我正在尝试从这些部分观测中提取天空状况。天空条件包含我在列表中称为“单词”的任何单词。我确信有更好的方法来做到这一点,但我试图让脚本查看列表的每个元素中的项目,然后确定其中一个关键词是否在元素中。如果找到了,我会将其添加到一个名为“找到”的新列表中,然后我最终想将此信息添加到 Excel 电子表格中。我的问题是我很难找到在不同天空条件下增加的地方。我需要它遍历 skycons 列表中一行中的每个元素,然后我需要它递增到下一行。我觉得我已经将增量移动到脚本的几个不同部分,但它仍然无法正常工作。它要么增加得太快,要么不会遍历行的所有元素,要么根本不会增加。这是代码... 它要么增加得太快,要么不会遍历行的所有元素,要么根本不会增加。这是代码... 它要么增加得太快,要么不会遍历行的所有元素,要么根本不会增加。这是代码...

 skycons = [' -RA BR BKN008 OVC012 09/08 ',
 ' RA BR BKN008 OVC012 09/08 ',
 ' R02/2600VP6000FT -RA BR BKN008 OVC012 09/08 ',
 ' -RA BR SCT007 BKN013 OVC019 09/08 ',
 ' CLR 09/08 ']
 

i = 0
words = ['FEW', 'SCT', 'BKN', 'OVC', 'CLR']
found = []
for item in skycons[i].split():
    print(skycons[i].split())
    for word in words:
        print(word)        
        if item.startswith(word):            
            found += item
            print(found)
    sky = " ".join(found)
    print(sky)
    i+=1

这可能是一团糟,我愿意接受建议。我基本上需要从每次观察中获取天空状况并将其插入电子表格中。我曾尝试使用正则表达式严格执行此操作,但它最终会抓取上述列表中不存在的其他观察元素。非常感谢任何帮助。

标签: pythonfor-loopiteration

解决方案


found += item不像你认为的那样做。看这个:

>>> found = []
>>> found += 'OVC'
>>> found
['O', 'V', 'C']

我不认为这是你所期望的。它将每个字符附加到列表中,而不是整个字符串。请尝试append()

found.append(item)

此外,i没有在正确的时间增加。我认为您需要另一个外部循环来通过 METAR。这就是我最终得到的结果:

skycons = [' -RA BR BKN008 OVC012 09/08 ',
 ' RA BR BKN008 OVC012 09/08 ',
 ' R02/2600VP6000FT -RA BR BKN008 OVC012 09/08 ',
 ' -RA BR SCT007 BKN013 OVC019 09/08 ',
 ' CLR 09/08 ']
 

words = ['FEW', 'SCT', 'BKN', 'OVC', 'CLR']
for metar in skycons:
    found = []
    for item in metar.split():
        for word in words:
            if item.startswith(word):            
                found.append(item)
    sky = " ".join(found)
    print(sky)

...输出...

 BKN008 OVC012
 BKN008 OVC012
 BKN008 OVC012
 SCT007 BKN013 OVC019
 CLR

推荐阅读