Python 不区分列表和字符串的len()?
Python doesn't differentiate len() of list and string?
例如我有这个 pandas 简单数据框:
>> print(file)
Name
0 ['junior','senior']
1 freshgrad
当我尝试使用 :
>> len(file[0])
2
但是第二个
>> len(file[1])
9
但是我想要第二个计算为1
这两个怎么区分?
- 我试过使用
.join()
但它仍然计算为 9
- 我试过了
list.count
但是我遇到了一个错误
您可以定义自己的长度函数,它使用类型来确定如何计算长度:
def mylen(data):
return len(data) if isinstance(data,list) else 1
最好的方法是检查相关项目的数据类型。您可以使用:
if isinstance(item, list):
...
并且:
if isinstance(item, str):
...
如果是字符串,您可以根据需要使用 1 作为长度。请注意,使用 isinstance(item, dtype)
比 type(item) == dtype
更好,因为它会自动处理子类类型。
freshgrad 是一个字符串
所以 len(file[1]) 意味着你正在计算这个 string.It 的长度是 9.
如果 file[1] 是一个包含 freshgrad like['freshgrad'] 的列表,len(file[1]) 将为 1.
你可以使用 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
s 以不同方式处理各种类型。 (事实上,这就是 np.size
正在做的事情。在幕后 np.size
正在使用 try..except
来处理异常情况。)
当一个序列中的所有对象都具有相同类型时,生活通常会更简单(因此更好)。所以最好建一个Series,其元素都是列表:
In [301]: file = pd.Series([['junior','senior'], ['freshgrad']])
例如我有这个 pandas 简单数据框:
>> print(file)
Name
0 ['junior','senior']
1 freshgrad
当我尝试使用 :
>> len(file[0])
2
但是第二个
>> len(file[1])
9
但是我想要第二个计算为1
这两个怎么区分?
- 我试过使用
.join()
但它仍然计算为9
- 我试过了
list.count
但是我遇到了一个错误
您可以定义自己的长度函数,它使用类型来确定如何计算长度:
def mylen(data):
return len(data) if isinstance(data,list) else 1
最好的方法是检查相关项目的数据类型。您可以使用:
if isinstance(item, list):
...
并且:
if isinstance(item, str):
...
如果是字符串,您可以根据需要使用 1 作为长度。请注意,使用 isinstance(item, dtype)
比 type(item) == dtype
更好,因为它会自动处理子类类型。
freshgrad 是一个字符串
所以 len(file[1]) 意味着你正在计算这个 string.It 的长度是 9.
如果 file[1] 是一个包含 freshgrad like['freshgrad'] 的列表,len(file[1]) 将为 1.
你可以使用 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
s 以不同方式处理各种类型。 (事实上,这就是 np.size
正在做的事情。在幕后 np.size
正在使用 try..except
来处理异常情况。)
当一个序列中的所有对象都具有相同类型时,生活通常会更简单(因此更好)。所以最好建一个Series,其元素都是列表:
In [301]: file = pd.Series([['junior','senior'], ['freshgrad']])