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怎么样提取字符到列表?的主要内容,如果未能解决你的问题,请参考以下文章