【问题标题】:In a list of multiword strings, extract second word在多词字符串列表中,提取第二个词
【发布时间】:2020-04-04 21:59:44
【问题描述】:

我有一个字符串列表。我想提取每个字符串中的第二个单词并将其保存到一个新列表中。有些元素只有一个单词。

l = ["OPTY PLN EXTRCT","MRKT COMMUNITY TABLE", "COMM", "EXT OPTY EMP"] 

期望的输出:

output = ['PLN', 'COMMUNITY', 'OPTY']

列表理解用于提取第一个单词。

[i.split()[0] for i in l] 

下面的代码会引发索引错误,因为列表中的元素只有一个单词。

[i.split()[1] for i in l]

如果元素只有一个单词,我希望迭代跳过它并继续。 我正在玩一个 Try 和 except 但没有成功让它工作。

【问题讨论】:

    标签: python string list split list-comprehension


    【解决方案1】:

    您可以像 ... if len(i.split()) > 1] 这样将 if 条件添加到您的理解中,但这需要您将单词拆分两次,这里我们使用 map()l 的每个元素执行一次。

    l = ["OPTY PLN EXTRCT","MRKT COMMUNITY TABLE", "COMM", "EXT OPTY EMP"]
    
    output = [words[1] for words in map(str.split, l) if len(words) > 1]
    

    输出:

    ['PLN', 'COMMUNITY', 'OPTY']
    

    或者,如果您使用的是 python3.8,我们可以使用新的:= 表示法。

    output = [words[1] for i in l if len(words := i.split()) > 1]
    

    【讨论】:

      【解决方案2】:
      words = [w.split(None, 3)[1] for w in l if any(x.isspace() for x in w.strip())]
      

      如果它是一个空字符串,仅包含空格,并且它确实包含字符但中间没有空格,这将从列表中排除一个单词。因此,您应该至少有两个词来拆分和提取。请注意,我的拆分解决方案在第二个单词之后停止拆分,因此字符串中可能有很多它们,但 split() 不会因为处理它们而浪费时间。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-06
        • 2022-11-06
        • 2015-05-08
        • 2011-10-11
        相关资源
        最近更新 更多