代码之家  ›  专栏  ›  技术社区  ›  Ran

拆分字符串并使用Python将其保存到列表中

  •  3
  • Ran  · 技术社区  · 7 年前

    我有一个字符串,我在其中的所有不同位置插入了一个空格,并将其保存到列表中。现在,这个字符串列表中有空格,我想拆分这些字符串并将输出放在一个列表中,当我这样做时,碰巧有多个列表在其中:

    这是我正在研究的代码:

    var ='sans'
    res = [var[:i]+' '+var[i:] for i in range(len(var))]
    // The previous line: AM adding a space to see maybe that would generate other words
    cor = [res[i].split() for i in range (len(res))]
    

    这是我得到的输出:

    >>> cor
    [['sans'], ['s', 'ans'], ['sa', 'ns'], ['san', 's']]
    

    我的期望:

    >>> cor
        ['sans', 's', 'ans', 'sa', 'ns', 'san', 's']
    

    我是python新手,不知道我缺少了什么。

    谢谢

    5 回复  |  直到 7 年前
        1
  •  6
  •   pault Tanjin    7 年前

    另一种方法:

    cor = " ".join(res).split()
    

    输出:

    ['sans', 's', 'ans', 'sa', 'ns', 'san', 's']
    

    解释

    " ".join(res) 将各个字符串连接到 res 在他们之间有一个空间。然后呼叫 .split() 将此空白字符串拆分回列表。

    编辑 :第二种方法不涉及中间变量 物件 ,尽管这一款看起来并不那么容易:

    cor = [var[:i/2+1] if i%2==1 else var[i/2:] for i in range(2*len(var)-1)]
    

    基本上,您可以在前面和后面的构建子字符串之间进行翻转。

        2
  •  3
  •   Stefan Pochmann    7 年前

    首先,你的

    [res[i].split() for i in range (len(res))]
    

    这是一种复杂的非音速方式:

    [r.split() for r in res]
    

    现在问题是你 r.split() 作为您的最终结果。相反,您应该将其用作进一步处理的来源:

    [s for r in res for s in r.split()]
    
        3
  •  2
  •   Dekel    7 年前

    如果你有清单

    cor = [['sans'], ['s', 'ans'], ['sa', 'ns'], ['san', 's']]
    

    如果要将其展平,可以使用以下方法:

    flat = [x for y in cor for x in y]
    

    输出将为:

    ['sans', 's', 'ans', 'sa', 'ns', 'san', 's']
    

    您也可以直接使用 res 变量:

    cor = [x for y in [res[i].split() for i in range (len(res))] for x in y]
    
        4
  •  1
  •   RoadRunner    7 年前

    你可以一直使用 map() 将每个字符串拆分为 res :

    list(map(str.split, res))
    

    其中给出:

    [['sans'], ['s', 'ans'], ['sa', 'ns'], ['san', 's']]
    

    然后您可以使用 itertools.chain.from_iterable 要展平列表,请执行以下操作:

    list(chain.from_iterable(map(str.split, res)))
    

    其输出:

    ['sans', 's', 'ans', 'sa', 'ns', 'san', 's']
    
        5
  •  0
  •   user9158931 user9158931    7 年前

    您可以在一行中执行类似操作,而无需导入任何模块:

    var ='sans'
    
    final=[]
    list(map(lambda x:list(map(lambda y:final.append(y),x)),[(var[i:]+' '+var[:i]).split() for i in range(0,len(var))]))
    print(final)
    

    输出:

    ['sans', 'ans', 's', 'ns', 'sa', 's', 'san']