Python 计算列表中的数字和字母数?
假设listx=[12/12/12017年7月23日] 我想计算字母的数量,在这个例子中是0,在这个例子中是6 在遍历for循环时,我尝试调用x[I].isalpha和x[I].isnumeric,但出现了一个错误 TypeError:列表索引必须是整数或片,而不是strPython 计算列表中的数字和字母数?,python,python-3.x,Python,Python 3.x,假设listx=[12/12/12017年7月23日] 我想计算字母的数量,在这个例子中是0,在这个例子中是6 在遍历for循环时,我尝试调用x[I].isalpha和x[I].isnumeric,但出现了一个错误 TypeError:列表索引必须是整数或片,而不是str 任何帮助都将不胜感激 您的错误表明您对没有意义的x中的i或s中的i执行了操作,其中s是x的一个元素,一个字符串。你想做的是为了我在rangelens。更好的是c.isalpha代替s.c.这是你想要的吗 x = ["12/12
任何帮助都将不胜感激 您的错误表明您对没有意义的x中的i或s中的i执行了操作,其中s是x的一个元素,一个字符串。你想做的是为了我在rangelens。更好的是c.isalpha代替s.c.这是你想要的吗
x = ["12/12/12", "Jul-23-2017"]
sum(1 for word in x for c in word if c.isdigit()) # 12
sum(1 for word in x for c in word if c.isalpha()) # 3
您可以这样做:
def count(L):
dgt=0
letters=0
for s in L:
for c in s:
if str(c).isdigit():
dgt+=1
elif str(c).isalpha():
letters+=1
return (dgt, letters)
>>> count(["12/12/12", "Jul-23-2017"])
#returns (12,3) - There are 12 digits and 3 chars ('J', 'u', 'l')
如果要为列表中的每个单词打印元组,可以执行以下操作:
def count(L):
for word in L:
yield (sum(s.isdigit() for s in word), sum(s.isalpha() for s in word))
for t in count(L):
print t
#outputs:
(6, 0)
(6, 3)
那么:
def analyze(s):
return [sum(n) for n in zip(*((c.isdigit(), c.isalpha()) for c in s))]
strings = ["12/12", "12/12/12", "Jul-23-2017"]
for string in strings:
print(analyze(string), string)
输出
我将第一个和设置为等于一个名为digits的变量,将第二个和设置为相等
求和到一个名为字母的变量
rangelens是python代码的味道。几乎总是有更好的方法去做。。。正如您在本例中所展示的,不太简单的情况通常涉及EnumerateMM,s中c的sumc.isalpha工作得很好。@cᴏʟᴅsᴘᴇᴇᴅ mapstr.isalpha,string.Yes,然后是和,因为这似乎是OP想要的:@我认为这是有道理的。我试图遍历列表x中的每个索引。因此,在您的示例中,s将是列表x中的项目?sumc.isalpha/isdigit for c in word要简洁得多。@Bit实际上,我将从一列数据框中逐行加载数据。例如,我的前三行是[12/12,12/12/12,Jul-23-2017]。我将第一个和设置为等于一个名为digits的变量,将第二个和设置为一个名为letters的变量。使用您发送给我的列表理解,三行中的数字都是6,字母都是14。我想OP需要一个字符串计数。@user3079275我实际上只需要一个字母数量和数字数量的计数,所以需要一个字符串计数。我将从熊猫数据帧中逐行加载。
[4, 0] 12/12
[6, 0] 12/12/12
[6, 3] Jul-23-2017
digits, letters = analyze("Jul-23-2017")