将Python2.7语法转换为3.3-sum(map(len,P))
我有一个与Python2.7一起使用的程序,但不是Python3.3。当然,我知道我需要使用range而不是xrange,add()用于打印等。。但该程序有很多“映射”方法,似乎会产生问题。当我遇到这个错误时:将Python2.7语法转换为3.3-sum(map(len,P)),python,python-2.7,syntax,Python,Python 2.7,Syntax,我有一个与Python2.7一起使用的程序,但不是Python3.3。当然,我知道我需要使用range而不是xrange,add()用于打印等。。但该程序有很多“映射”方法,似乎会产生问题。当我遇到这个错误时:TypeError:type'map'的对象没有len()我只是将它转换为一个字符串,它就工作了 我不知道如何转换的是这个表达式: sum(map(len,P)) 我得到这个错误:TypeError:map类型的对象没有len() 但这一次我不知道该投什么,怎么投。 如果有帮助的话,我可以
TypeError:type'map'的对象没有len()
我只是将它转换为一个字符串,它就工作了
我不知道如何转换的是这个表达式:
sum(map(len,P))
我得到这个错误:TypeError:map类型的对象没有len()
但这一次我不知道该投什么,怎么投。
如果有帮助的话,我可以发布整个代码
以下是p的初始化方式:
P, Q = [line.strip().lstrip('(').rstrip(')').split(')(') for line in input_data.readlines()]
P = [map(int, perm_cycle.split()) for perm_cycle in P]
在中,map
返回迭代器,而在中返回列表。您可以通过调用list(iterator)
从迭代器构造列表
因此,您需要将p更改为:
P = [list(map(int, perm_cycle.split())) for perm_cycle in P]
然后p的元素可以传递到len
另一种改变它的方法是使用以下表达式:
sum(len(list(item) for item in P)
在Python3中,始终可以将map
调用替换为a(在Python3中,可以将其替换为列表理解)。在中,map
返回一个迭代器,而在中,它返回一个列表。您可以通过调用list(iterator)
从迭代器构造列表
因此,您需要将p更改为:
P = [list(map(int, perm_cycle.split())) for perm_cycle in P]
然后p的元素可以传递到len
另一种改变它的方法是使用以下表达式:
sum(len(list(item) for item in P)
在Python3中,始终可以将map
调用替换为a(在Python3中,可以将其替换为列表理解)。在中,map
返回一个迭代器,而在中,它返回一个列表。您可以通过调用list(iterator)
从迭代器构造列表
因此,您需要将p更改为:
P = [list(map(int, perm_cycle.split())) for perm_cycle in P]
然后p的元素可以传递到len
另一种改变它的方法是使用以下表达式:
sum(len(list(item) for item in P)
在Python3中,始终可以将map
调用替换为a(在Python3中,可以将其替换为列表理解)。在中,map
返回一个迭代器,而在中,它返回一个列表。您可以通过调用list(iterator)
从迭代器构造列表
因此,您需要将p更改为:
P = [list(map(int, perm_cycle.split())) for perm_cycle in P]
然后p的元素可以传递到len
另一种改变它的方法是使用以下表达式:
sum(len(list(item) for item in P)
在Python3中,您始终可以将map
调用替换为a(在Python3中,您可以将其替换为列表理解)。您可以首先将p
的每个元素转换为列表:
map(lambda x: len(list(x)), P)
或:
更好的方法是遵循@Alfe-answer
这里有一个简单的(虽然不是完美的)规则:在Python3中将Python2map(…)
替换为list(map(…)
。您可以先将p
的每个元素转换为一个列表:
map(lambda x: len(list(x)), P)
或:
更好的方法是遵循@Alfe-answer
这里有一个简单的(虽然不是完美的)规则:在Python3中将Python2map(…)
替换为list(map(…)
。您可以先将p
的每个元素转换为一个列表:
map(lambda x: len(list(x)), P)
或:
更好的方法是遵循@Alfe-answer
这里有一个简单的(虽然不是完美的)规则:在Python3中将Python2map(…)
替换为list(map(…)
。您可以先将p
的每个元素转换为一个列表:
map(lambda x: len(list(x)), P)
或:
更好的方法是遵循@Alfe-answer
这里有一个简单的(虽然不是完美的)规则:在Python3中将Python2map(…)
替换为list(map(…)
。而不是
P = [map(int, perm_cycle.split()) for perm_cycle in P]'
使用
出现问题的原因是您试图稍后调用len(map(…)
,该函数在Python2中有效,但在Python3中不起作用,因为Python3会延迟地计算该map
(它是一个生成器)。围绕它运行显式的列表
,去除懒惰并获得一个真正的列表
<>但是考虑一下,你可以把<<代码> map < /C>完全删除,因为如果你只对列表的长度感兴趣,就不需要<代码> map < /代码>它不知何故。代码>映射
ping它不会更改其大小
这意味着:
sum(map(len, perm_cycle.split()))
代替。代替
P = [map(int, perm_cycle.split()) for perm_cycle in P]'
使用
出现问题的原因是您试图稍后调用len(map(…)
,该函数在Python2中有效,但在Python3中不起作用,因为Python3会延迟地计算该map
(它是一个生成器)。围绕它运行显式的列表
,去除懒惰并获得一个真正的列表
<>但是考虑一下,你可以把<<代码> map < /C>完全删除,因为如果你只对列表的长度感兴趣,就不需要<代码> map < /代码>它不知何故。代码>映射ping它不会更改其大小
这意味着:
sum(map(len, perm_cycle.split()))
代替。代替
P = [map(int, perm_cycle.split()) for perm_cycle in P]'
使用
出现问题的原因是您试图稍后调用len(map(…)
,该函数在Python2中有效,但在Python3中不起作用,因为Python3会延迟地计算该map
(它是一个生成器)。围绕它运行显式的列表
,去除懒惰并获得一个真正的列表
<>但是考虑一下,你可以把<<代码> map < /C>完全删除,因为如果你只对列表的长度感兴趣,就不需要<代码> map < /代码>它不知何故。代码>映射ping它不会更改其大小
这意味着:
sum(map(len, perm_cycle.split()))
代替。代替
P = [map(int, perm_cycle.split()) for perm_cycle in P]'
使用
出现问题的原因是您试图稍后调用len(map(…)
,该函数在Python2中有效,但在Python3中不起作用,因为Python3会延迟地计算该map
(它是一个生成器)。围绕它运行显式的列表
,去除懒惰并获得一个真正的列表
<>但是考虑一下,你可以把<<代码> map < /C>完全删除,因为如果你只对列表的长度感兴趣,就不必使用COD。