大佬教程收集整理的这篇文章主要介绍了如何从 Python 数组中的字符串中分隔字母和数字?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要在 Python 中的数组中分隔字符串中的字母和数字。
我的数组是这样的:
@H_607_7@kID_count_List = ['Sofia 1','Claire Ann 1','Joe 3','Betty 2','ArchIE 1','Phil 1','Luke 1'] @H_301_7@我想制作两个这样的数组:
@H_607_7@names = ['Sofia','Claire Ann','Joe','Betty','ArchIE','Phil','Luke'] counts = [1,1,3,2,1] @H_301_7@我的方法是这样的(受到其他问题的启发):
@H_607_7@import re kID_count_List = ['Sofia 1','Luke 1'] names = [] count = [] for element in kID_count_List: name = " ".join(re.split("[^a-zA-Z]*",element)) occurence = int(element.match('/\d+/g').join("")) names.append(Name) counts.append(occurencE) @H_301_7@如何使这项工作?非常感谢!!!
解决方法
关于:
@H_607_7@names,counts = zip(*[re.fullmatch(r"(\D+)\s(\d+)",s).groups() for s in kid_count_list])获取 @H_607_7@names 为
@H_607_7@('Sofia','Claire Ann','Joe','Betty','Archie','Phil','Luke')和 @H_607_7@counts 为
@H_607_7@('1','1','3','2','1')它们不是列表,但可以很容易地进行转换:
@H_607_7@names = list(names) counts = list(map(int,counts)) # convert the counts to int,too得到
@H_607_7@>>> names ['Sofia','Luke'] >>> counts [1,1,3,2,1]我们形成一个正则表达式来匹配一些非数字 @H_607_7@(\D+) 和它后面的空格 @H_607_7@\s 以及末尾的一些数字 @H_607_7@(\d+);我们要求这是一个完整的匹配,即从头到尾(就像有 @H_607_7@^ 和 @H_607_7@$ 锚点一样)。然后取出每个字符串的匹配组。此时我们有:
@H_607_7@[('Sofia','1'),('Claire Ann',('Joe','3'),('Betty','2'),('Archie',('Phil',('Luke','1')]为了从中取出两个列表,我们使用 @H_607_7@zip(*...) 构造。
,如果没有使用 Pandas,您可以使用
@H_607_7@import re kid_count_list = ['Sofia 1','Claire Ann 1','Joe 3','Betty 2','Archie 1','Phil 1','Luke 1'] rx = re.compile(r'\s+(?=\d+$)') l = [rx.split(X) for x in kid_count_list] names,counts = zip(*l) print(list(names)) # => ['Sofia','Luke'] print(list(counts)) # => ['1','1']参见 Python demo 和 regex demo。
这里,@H_607_7@re.split(r'\s+(?=\d+$)',X) 将用任何一个或多个空格字符分割每个字符串,并在字符串末尾加上一个或多个数字。
详情:
由于您的问题最初包含对 Pandas 的引用,因此这里是 Pandas 版本
你可以使用
@H_607_7@import re import pandas as pd import numpy as np kid_count_list = ['Sofia 1','Luke 1'] cols = [re.split(r'\s+(?=\d+$)',X) for x in kid_count_list] df = pd.DataFrame(cols,columns=['names','counts']) ## >>> df ## names counts ## 0 Sofia 1 ## 1 Claire Ann 1 ## 2 Joe 3 ## 3 Betty 2 ## 4 Archie 1 ## 5 Phil 1 ## 6 Luke 1或者,您可以使用无正则表达式的解决方案:
@H_607_7@kid_count_list = ['Sofia 1','Luke 1'] df = pd.DataFrame({'data':kid_count_list}) df[['names','counts']] = df.pop('data').str.rsplit(r' ',n=1,expand=TruE)在这里,您只需使用 @H_607_7@kid_count_list 值初始化数据框,然后 @H_607_7@.pop('data') 部分将从数据框中删除初始列并将其返回以进行处理,然后它将使用右分割每个值空间只有一次。
,您可以使用以下代码
@H_607_7@import re kid_count_list = ['Sofia 1','Luke 1'] names,counts = [],[] split_list = [re.split(r'\s+(?=\d+$)',item) for item in kid_count_list] for item in split_list: names.append(item[0]) counts.append(int(item[1])) print(names) print(counts)输出将是
@H_607_7@['Sofia','Luke'] [1,1]
以上是大佬教程为你收集整理的如何从 Python 数组中的字符串中分隔字母和数字?全部内容,希望文章能够帮你解决如何从 Python 数组中的字符串中分隔字母和数字?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。