Python不区分list和string的len()?

2024-10-03 11:20:55 发布

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

例如,我有一个简单的数据框:

>> print(file)
       Name
    0  ['junior','senior']
    1  freshgrad

当我尝试使用:

>> len(file[0])
2

但是对于第二个

>> len(file[1])
9

但是我想让第二个计算为1如何区分这两个?你知道吗

  1. 我试过使用.join(),但它仍然计算为9
  2. 我试过list.count但是我出错了

Tags: 数据namelencountlistfile区分print
3条回答

最好的方法是检查有问题项的数据类型。您可以使用:

if isinstance(item, list):
    ...

以及:

if isinstance(item, str):
    ...

对于字符串,如果愿意,可以使用1作为长度。请注意,使用isinstance(item, dtype)比使用type(item) == dtype更好,因为它将自动处理子类类型。你知道吗

您可以使用np.size

In [301]: file = pd.Series([['junior','senior'], 'freshgrad'])

In [302]: file.apply(np.size)
Out[302]: 
0    2
1    1
dtype: int64

In [327]: np.size(file[0])
Out[327]: 2

In [328]: np.size(file[1])
Out[328]: 1

但在某种程度上,这可能只是拖延你的痛苦。当物体 一个序列(或任何类型的序列)有不同的类型,代码往往需要进行类型检查或try..except以不同的方式处理各种类型。(事实上,这就是np.size正在做的。在引擎盖下np.size正在使用try..except来处理异常情况。)

当序列中的所有对象都具有相同的类型时,生活通常更简单(因此更好)。因此,最好构建一个系列,其元素都是列表:

In [301]: file = pd.Series([['junior','senior'], ['freshgrad']])

freshgrad是字符串
所以len(文件[1])意味着你要计算这个的长度字符串。它是9。
如果文件[1]是一个包含freshgrad的列表,如['freshgrad'],len(文件[1])将是1。

相关问题 更多 >