Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Python2.7语法转换为3.3-sum(map(len,P))_Python_Python 2.7_Syntax - Fatal编程技术网

将Python2.7语法转换为3.3-sum(map(len,P))

将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() 但这一次我不知道该投什么,怎么投。 如果有帮助的话,我可以

我有一个与Python2.7一起使用的程序,但不是Python3.3。当然,我知道我需要使用range而不是xrange,add()用于打印等。。但该程序有很多“映射”方法,似乎会产生问题。当我遇到这个错误时:
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中将Python2
map(…)
替换为
list(map(…)

您可以先将
p
的每个元素转换为一个列表:

map(lambda x: len(list(x)), P)
或:

更好的方法是遵循@Alfe-answer


这里有一个简单的(虽然不是完美的)规则:在Python3中将Python2
map(…)
替换为
list(map(…)

您可以先将
p
的每个元素转换为一个列表:

map(lambda x: len(list(x)), P)
或:

更好的方法是遵循@Alfe-answer


这里有一个简单的(虽然不是完美的)规则:在Python3中将Python2
map(…)
替换为
list(map(…)

您可以先将
p
的每个元素转换为一个列表:

map(lambda x: len(list(x)), P)
或:

更好的方法是遵循@Alfe-answer

这里有一个简单的(虽然不是完美的)规则:在Python3中将Python2
map(…)
替换为
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。