如何在不转换为字符串的情况下计算所有列表元素中的大写字母总数

2024-10-01 00:24:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我的数据:

import pandas as pd
data = {'game': [1, 2], 'moves': [['D4', 'd5', 'NF4'],['d5', 'c6', 'Be4']]}
df = pd.DataFrame(data) 
| game |     moves    |
|------|--------------|
| 1    |[D4, d5, NF4]  |
| 2    |[d5, c6, Be4] |

对于每一行,我想提取“moves”列中列表前n个元素的大写字母数。到目前为止,我有以下解决方案:

count = []
for row in df.moves:
    count.append(sum(1 for elem in listToString(row[0:10]) if elem.isupper()))

这是可行的,但我更喜欢不涉及串联列表的字符串元素的解决方案。有这样的事吗

输出:

[3, 1]

Tags: game元素df列表fordatacount解决方案
2条回答

试试这个:

count = df['moves'].apply(lambda x: sum(1 for i in x[:10] for y in i if y.isupper())).tolist()

输出:

[3, 1]

使用列表理解,可以执行以下操作:

count  = [[y[0].isupper() for y in x].count(True) for x in data['moves']]

或者,如果需要计算所有大写字母:

count  = [sum([sum(1 for elem in y if elem.isupper()) for y in x]) for x in data['moves']]

再好一点:

count  = [sum(1 for elem in ''.join(x) if elem.isupper())  for x in data['moves']]

相关问题 更多 >