Python 错误:类型为';int';没有len()
我有一个函数,它应该获取一个数组,并将其从最小字符串大小排序到最大字符串大小,然后使用注入排序打印它 在线:Python 错误:类型为';int';没有len(),python,arrays,sorting,Python,Arrays,Sorting,我有一个函数,它应该获取一个数组,并将其从最小字符串大小排序到最大字符串大小,然后使用注入排序打印它 在线:while(j>=0)和(len(b[j])>键): 我得到这个错误: “int”类型的对象没有len() 代码: 您可以使用至少\u 1d()或tolist()来确保在处理标量和数组/列表的潜在混合时,对象将具有len()。您可以使用至少\u 1d()或tolist()来确保对象将具有len()处理标量和数组/列表的潜在混合时。我不确定您是如何开始生成错误的,因为[“alice”、“bo
while(j>=0)和(len(b[j])>键):
我得到这个错误:
“int”类型的对象没有len()
代码:
您可以使用
至少\u 1d()
或tolist()
来确保在处理标量和数组/列表的潜在混合时,对象将具有len()
。您可以使用至少\u 1d()
或tolist()
来确保对象将具有len()
处理标量和数组/列表的潜在混合时。我不确定您是如何开始生成错误的,因为[“alice”、“bob”、“sally”]
的输入没有崩溃,但它确实生成了数字
这可能是因为您分配了
b_-list[j+1]=keyValue
,其中keyValue=len(b_-list[i])
,这将是一个int,因此,如果您再次点击该元素,并尝试对其执行len()
,您就会看到错误
现在,我们从
打印出来
bob
alice
sally
我不确定您是如何开始生成错误的,因为
[“alice”、“bob”、“sally”]
的输入没有崩溃,但它确实生成了数字
这可能是因为您分配了
b_-list[j+1]=keyValue
,其中keyValue=len(b_-list[i])
,这将是一个int,因此,如果您再次点击该元素,并尝试对其执行len()
,您就会看到错误
现在,我们从
打印出来
bob
alice
sally
听起来好像您有一个整数和字符串的混合列表,并且希望按字符串的长度排序。如果是这种情况,请在排序之前将整个列表转换为类似的类型——字符串 鉴于:
>>> li=[1,999,'a','bbbb',0,-3]
你可以做:
>>> sorted(map(str, li), key=len)
['1', 'a', '0', '-3', '999', 'bbbb']
>>> sorted(map(str, li), key=lambda e: (len(e), e))
['0', '1', 'a', '-3', '999', 'bbbb']
如果需要按长度进行双键排序,则可以执行以下操作:
>>> sorted(map(str, li), key=len)
['1', 'a', '0', '-3', '999', 'bbbb']
>>> sorted(map(str, li), key=lambda e: (len(e), e))
['0', '1', 'a', '-3', '999', 'bbbb']
通过向键函数添加str
,可以在不更改对象类型的情况下进行排序:
>>> sorted(li, key=lambda e: (len(str(e)), str(e)))
[0, 1, 'a', -3, 999, 'bbbb']
听起来好像您有一个整数和字符串的混合列表,并且希望按字符串的长度排序。如果是这种情况,请在排序之前将整个列表转换为类似的类型——字符串 鉴于:
>>> li=[1,999,'a','bbbb',0,-3]
你可以做:
>>> sorted(map(str, li), key=len)
['1', 'a', '0', '-3', '999', 'bbbb']
>>> sorted(map(str, li), key=lambda e: (len(e), e))
['0', '1', 'a', '-3', '999', 'bbbb']
如果需要按长度进行双键排序,则可以执行以下操作:
>>> sorted(map(str, li), key=len)
['1', 'a', '0', '-3', '999', 'bbbb']
>>> sorted(map(str, li), key=lambda e: (len(e), e))
['0', '1', 'a', '-3', '999', 'bbbb']
通过向键函数添加str
,可以在不更改对象类型的情况下进行排序:
>>> sorted(li, key=lambda e: (len(str(e)), str(e)))
[0, 1, 'a', -3, 999, 'bbbb']
你期望len(b_list[j])是什么?如果你在你说的地方得到了错误,那么你也应该在
keyValue=len(b_list[i])
b_list[j+1]=keyValue
-你确定你在那里分配了正确的值吗?你说你在对字符串数组排序,但它听起来像是一个数字数组。除了在range()
中使用之外,您确定要使用len()
?看起来你可能只想要b_list[j]
或j
或什么的。你期望len(b_list[j])
是什么?如果你说的地方出现了错误,那么你也应该在keyValue=len(b_list[i])
b_list[j+1]=keyValue
-您确定在那里分配了正确的值吗?您说您正在对字符串数组进行排序,但听起来好像它是一个数字数组。除了在range()
中使用之外,您确定要使用len()
?看起来你可能只想要b_list[j]
或j
之类的东西。他想要的是字符串的长度,而不是列表。@Barmar显然他的字符串列表包含没有len()
的对象。这将让他的脚本运行并进行排序。然后,他可以在结果的一端找到没有长度的对象,这可能有助于调试。但是tolist()
会将所有字符串转换为一个字符串列表,因此所有字符串都具有len=1。正如其他人所指出的,问题在于,他在循环中有一个错误,用数字替换字符串b_list[j+1]=keyValue
@Barmar我看你是对的。这个答案根本解决不了问题。抱歉。他想要的是字符串的长度,而不是列表。@Barmar显然他的字符串列表包含的对象没有len()
。这将让他的脚本运行并进行排序。然后,他可以在结果的一端找到没有长度的对象,这可能有助于调试。但是tolist()
会将所有字符串转换为一个字符串列表,因此所有字符串都具有len=1。正如其他人所指出的,问题在于,他在循环中有一个错误,用数字替换字符串b_list[j+1]=keyValue
@Barmar我看你是对的。这个答案根本解决不了问题。很抱歉