Python 2.7 不清楚如何使用python

Python 2.7 不清楚如何使用python,python-2.7,Python 2.7,我试图得到n的除数长度(这是一个列表),如果它除以len(n)而没有余数 i = takewhile(lambda d: len(n) % d == 0 for d in range(3, 6), n) 我收到下列语法错误 如果不是唯一参数,则生成器表达式必须加括号 因此,我将代码修改为: i=takewhile((λd:len(n)%d==0表示范围(3,6))中的d),n) itertools.takewhile位于0xa7075c8> 我出了什么问题?它之所以输出,是因为itertool

我试图得到n的除数长度(这是一个列表),如果它除以len(n)而没有余数

i = takewhile(lambda d: len(n) % d == 0 for d in range(3, 6), n)
我收到下列语法错误

如果不是唯一参数,则生成器表达式必须加括号

因此,我将代码修改为:

i=takewhile((λd:len(n)%d==0表示范围(3,6))中的d),n)

itertools.takewhile位于0xa7075c8>


我出了什么问题?

它之所以输出
,是因为itertools生成生成器,而不是列表。因此,在您真正需要它之前,结果不会具体化(或者在它周围包装一个
列表(…)

正如编译器所说,生成器应具有父项,而不是整个lambda表达式。因此:

i = takewhile(lambda d: (len(n) % d == 0 for d in range(3, 6)), n)
但我们还没有做到这一点:你在你的lambda头部和生成器中定义了
d
,事实上:

i = takewhile(lambda d: (len(n) % d == 0 for d in range(3, 6)), n)
在Python-2中,或:

i = next(d for d in range(3, 6) if len(n) % d == 0)
在Python-3中

在解释器中运行此命令可提供:

$ python3
Python 3.5.2 (default, Nov 17 2016, 17:05:23) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> n=[1,2,3,4,5,6,7,8,9]
>>> i = next(d for d in range(3, 6) if len(n) % d == 0)
>>> i
3
>>> n=[1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5]
>>> i = next(d for d in range(3, 6) if len(n) % d == 0)
>>> i
5

等等,您可以在生成器和lambda中定义
d
double。这没有多大意义…我刚开始使用python,是的,我完全弄错了-。感谢您的简要解释。:)
$ python3
Python 3.5.2 (default, Nov 17 2016, 17:05:23) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> n=[1,2,3,4,5,6,7,8,9]
>>> i = next(d for d in range(3, 6) if len(n) % d == 0)
>>> i
3
>>> n=[1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5]
>>> i = next(d for d in range(3, 6) if len(n) % d == 0)
>>> i
5