>>> x = [1, 2, 3]
>>> y = ['a', 'b', 'c']
# 实现x与y的一一对应
>>> [[i, j] for i in x for j in y]
[[1, 'a'],
[1, 'b'],
[1, 'c'],
[2, 'a'],
[2, 'b'],
[2, 'c'],
[3, 'a'],
[3, 'b'],
[3, 'c']]
# 却是一种笛卡尔积的关系
想要实现一一对应还是应该用zip
:
>>> [[i, j] for i, j in zip(x, y)]
[[1, 'a'], [2, 'b'], [3, 'c']]
因为zip对象(python 3)不支持len
操作,且zip对象is not subscriptable
。
所以有时我们需要对此进行强制类型转换,然而当通过list
进行强转时,奇妙的事情发生了,
>>> x = zip([1, 2, 3], ['a', 'b', 'c']
>>> list(x)
[(1, 'a'), (2, 'b'), (3, 'c')]
>>> list(x)
[] # 为空
所以,有必要的话,我们需要保存一下中间变量:
>>> x = list(x)
```
>>>x=list(range(10))
>>>x[-1]
9
>>>x[:-1]
[0, 1, 2, 3, 4, 5, 6, 7, 8] # 除去最后一位元素,因为索引区间左闭右开
```
错误内容为:该类型不接受任何参数,可见错误的位置为类的构造函数,也即__init__(self)
或者未显式定义构造函数,或者定义的不合适,如以下的情况下,在客户端进行调用时会发生标题中的错误内容:
class A(object):
# 不接受任何参数
def __init__(self):
pass
class A(object):
# 命名错误,不是构造函数
def __int__(self, sizes):
pass