【问题标题】:Concatenating certain parts of a list. Removing spaces.连接列表的某些部分。删除空格。
【发布时间】:2015-02-05 19:30:01
【问题描述】:

我有一个逐字母拆分的名称列表,我想将各个名称连接在一起。 这是我目前拥有的:

['S', 't', 'u', 'a', 'r', 't', ' ', 'S', 't', 'e', 'v', 'e', ' ', 'A', 'n', 'd', 'r', 'e', 'w', ' ', 'L', 'u', 'k', 'e', ' ', 'S', 'h', 'a', 'n', 'e', 'y', ' ', 'L', 'u', 'k', 'e', ' ', 'M', 'o', 'l', 'e', 'y', ' ', 'M', 'o', 'l', 'e', 'y', ' ', 'R', 'o', 'b', ' ']

我想把它变成这样:

['Stuart', 'Steve', 'Andrew', 'Luke', 'Shaney', 'Luke', 'Moley', 'Moley', 'Rob']

【问题讨论】:

  • ''.join(your_list).split()
  • 这是可能的,但是您是如何获得第一个列表的?您应该首先将数据放入更好的格式,而不是将其放入这个混乱的格式中并尝试修复它。
  • @vaultah 这将产生一个字符串,而不是一个列表。
  • @Shaney96 ''.join(your_list).split() 成功了
  • @Shaney96 我强烈建议您对原始文本文件和用于解析它的代码提出一个新问题。正如我所说,正确的解决方案是首先不要陷入这种情况。

标签: python list concatenation list-comprehension spaces


【解决方案1】:

info 成为您的名单。

concat = "".join(info)
names = concat.split()
print names

但是看两位炼金术士的评论。

【讨论】:

    【解决方案2】:

    使用itertools.groupby 并使用str.isspace 分组:

    >>> from itertools import groupby
    >>> lst = ['S', 't', 'u', 'a', 'r', 't', ' ', 'S', 't', 'e', 'v', 'e', ' ', 'A', 'n', 'd', 'r', 'e', 'w', ' ', 'L', 'u', 'k', 'e', ' ', 'S', 'h', 'a', 'n', 'e', 'y', ' ', 'L', 'u', 'k', 'e', ' ', 'M', 'o', 'l', 'e', 'y', ' ', 'M', 'o', 'l', 'e',  'y', ' ', 'R', 'o', 'b', ' ']
    >>> [''.join(g) for k, g in groupby(lst, key=str.isspace) if not k]
    ['Stuart', 'Steve', 'Andrew', 'Luke', 'Shaney', 'Luke', 'Moley', 'Moley', 'Rob']
    

    我正在阅读文本文件。我分解了文本并将其放入 一个列表,我现在想知道如何获取它,以便它识别何时有空格 存在并相应地连接数据。我不确定如何 虽然

    我不确定您是如何阅读此文本的,但您处理它的方式不正确。不要在行或从文件中读取的整个文本上调用list()

    >>> s = 'Stuart Steve Andrew Luke Shaney Luke Moley Moley Rob'
    >>> list(s)
    ['S', 't', 'u', 'a', 'r', 't', ' ', 'S', 't', 'e', 'v', 'e', ' ', 'A', 'n', 'd', 'r', 'e', 'w', ' ', 'L', 'u', 'k', 'e', ' ', 'S', 'h', 'a', 'n', 'e', 'y', ' ', 'L', 'u', 'k', 'e', ' ', 'M', 'o', 'l', 'e', 'y', ' ', 'M', 'o', 'l', 'e', 'y', ' ', 'R', 'o', 'b']
    

    如果您想要一个单词列表,只需在您阅读的文本上使用str.split

    >>> s.split()
    ['Stuart', 'Steve', 'Andrew', 'Luke', 'Shaney', 'Luke', 'Moley', 'Moley', 'Rob']
    

    【讨论】:

    • 欢呼将您的回复与上下文联系起来,我很感激。
    【解决方案3】:

    你可以遍历列表中的字符,这里有一个小例子:

    # chars being your list
    names = []
    
    current_name = ""
    for current_char in chars:
         if current_char == ' ':
             names.append(current_name)
             current_name = ""
         else:
              current_name += current_char
    
     return names
    

    【讨论】:

      【解决方案4】:

      考虑将li 作为输入列表 -

      >>> [i for i in "".join(li).split(" ") if i.strip() != ""]
      ['Stuart', 'Steve', 'Andrew', 'Luke', 'Shaney', 'Luke', 'Moley', 'Moley', 'Rob']
      

      列表推导只是排除空字符串。

      【讨论】:

        猜你喜欢
        • 2014-06-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-25
        • 1970-01-01
        • 2011-07-23
        • 2020-03-10
        • 1970-01-01
        相关资源
        最近更新 更多