python怎么样提取字符到列表?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python怎么样提取字符到列表?相关的知识,希望对你有一定的参考价值。

比如有一段文本,有中文有英文有换行有标点符号,现在我想实现以下功能:按顺序取出字符或者标点符号,放到列表中,遇到中文字符或者标点时,按单个字符取出放到列表中,当遇到英文时,要按照整个单词提取(以空格为分割,不管是不是有意义的单词)也放到列表中,我是初学者,不知道谁可以提供可运行的python代码,谢谢

#coding=gb18030

import re

def convert(l1, l2):

    j = 0   

    for i in range(len(l2)):

        if l2[i] == "!": 

            l2[i] = l1[j] 

            j+=1   

    return l2

def sp(l):

    ol = [] 

    for i in range(len(l)):

        hanzil = []

        if l[i] != "!": 

            for n in range(0,len(l[i]),2):

                hanzil.append(l[i][n:n+2])

            l[i] = hanzil

    return l

def output(sls):

    ls = [] 

    for l in sls: 

        if isinstance(l, list):

            for k in l: 

                ls.append(k)

        else:   

            ls.append(l)

    return ls

   

def slash(str):

    e = re.findall('\\w*',str)

    els = [ i for i in e if i!=""]

    str = re.sub('\\w','!',str)

    str = re.sub('!+',' ! ',str)

    sls = str.split()

    sls = sp(sls) 

    sls = convert(els, sls)

    sls = output(sls)

    return sls


str = "python怎么样提取字符到列表? python ate pig 这个问题,确实很棘手 but I will help you  !!!"

ls = slash(str)

print "\\t".join(ls)

#从这里开始,这里上面的都是代码,直接复制即可运行


程序运行结果如下:

直接调用上面写好的slash 函数 就可以把字符串按你的要求分开放到列表中。代码写的比较仓促凑合着看,方法比较trick,见笑了。

(注:编码为gbk 且标点符号必须为中文输入法输入,即 , 。 “ ” ?等而非 , . " " ? 等)

参考技术A ','。加入(清单1)追问

请问可否给出能运行的代码?

如何将字符串中的所有数字映射到 Python 中的列表? [复制]

【中文标题】如何将字符串中的所有数字映射到 Python 中的列表? [复制]【英文标题】:How to map all numbers in a string to a list in Python? [duplicate] 【发布时间】:2013-03-22 16:12:28 【问题描述】:

假设我有一个字符串

"There are LJFK$(#@$34)(,0,ksdjf apples in the (4,5)"  

我希望能够将数字动态提取到列表中:[34, 0, 4, 5]。 有没有简单的方法在 Python 中做到这一点?

换句话说, 有没有办法提取由任何分隔符分隔的连续数字簇?

【问题讨论】:

可能重复***.com/questions/4289331/… 如果字符串是"12.34",你想要[12, 34]还是[12.34]? IOW,你想要的只是连续数字的整数吗? 在这种情况下,它将是 [12, 34],整数。当前答案按预期工作(我还不能接受) 【参考方案1】:

当然,使用regular expressions:

>>> s = "There are LJFK$(#@$34)(,0,ksdjf apples in the (4,5)"
>>> import re
>>> list(map(int, re.findall(r'[0-9]+', s)))
[34, 0, 4, 5]

【讨论】:

使用列表推导通常比使用map 更可取。尤其是因为您只是将结果投射到列表中。 @Cairnarvon 通常是这样,除非您可以简单地调用现有函数(因为您不必弄清楚临时变量的名称)。列表创建只是为了漂亮的输出。如果你要迭代结果,你显然可以跳过它。 您也可以使用\d+ 来表示正则表达式。 @Schoolboy 是的,但是必须使用比int 复杂得多的东西来支持٣٤ 之类的输入。 @phihag 为什么会这样??这些输入将如何通过过滤器??【参考方案2】:

您也可以不使用正则表达式来执行此操作,但需要做更多工作:

>>> s = "There are LJFK$(#@$34)(,0,ksdjf apples in the (4,5)"
>>> #replace nondigit characters with a space
... s = "".join(x if x.isdigit() else " " for x in s)
>>> print s
                   34   0                      4 5
>>> #get the separate digit strings
... digitStrings = s.split()
>>> print digitStrings
['34', '0', '4', '5']
>>> #convert strings to numbers
... numbers = map(int, digitStrings)
>>> print numbers
[34, 0, 4, 5]

【讨论】:

我想我比我打算提出的itertools.groupby 解决方案更喜欢这个。 这也是一个很好的解决方案

以上是关于python怎么样提取字符到列表?的主要内容,如果未能解决你的问题,请参考以下文章

python把列表前几个元素提取到新列表

python 怎么提取列表中出现次数最多的值

python怎么把一堆周期信号里面提取去一个周期的信号

python中 列表中有字典怎么提取数据

Python怎么提取括号里的括号中的其中一个数?

在python中建立一组列表后,怎么从列表中提取元素