程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何从 Python 数组中的字符串中分隔字母和数字?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何从 Python 数组中的字符串中分隔字母和数字??

开发过程中遇到如何从 Python 数组中的字符串中分隔字母和数字?的问题如何解决?下面主要结合日常开发的经验,给出你关于如何从 Python 数组中的字符串中分隔字母和数字?的解决方法建议,希望对你解决如何从 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) 将用任何一个或多个空格字符分割每个字符串,并在字符串末尾加上一个或多个数字。

详情

  • @H_607_7@\s+ - 一个或多个空格
  • @H_607_7@(?=\d+$) - 正向前瞻,确保字符串末尾紧邻当前位置右侧的一个或多个数字。

由于您的问题最初包含对 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,请注明来意。