Python 计算列表中的数字和字母数?

Python 计算列表中的数字和字母数?,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

假设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/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")