Наряду с принятым ответом, который правильно объяснил проблему, в понимании вашего списка, если вы используете python-2.x, используйте xrange()
, который возвращает более эффективный генератор (range()
в python 3 выполняет ту же работу ) _
вместо переменной throw n
:
[[1]*4 for _ in xrange(3)] # and in python3 [[1]*4 for _ in range(3)]
Кроме того, в качестве более Pythonic способа вы можете использовать itertools.repeat()
для создания объекта итератора повторяющихся элементов:
>>> a=list(repeat(1,4))
[1, 1, 1, 1]
>>> a[0]=5
>>> a
[5, 1, 1, 1]
PS Используя numpy, если вы хотите создать только массив единиц или нулей, вы можете использовать np.ones
и np.zeros
и / или для использования других чисел np.repeat()
:
In [1]: import numpy as np
In [2]:
In [2]: np.ones(4)
Out[2]: array([ 1., 1., 1., 1.])
In [3]: np.ones((4, 2))
Out[3]:
array([[ 1., 1.],
[ 1., 1.],
[ 1., 1.],
[ 1., 1.]])
In [4]: np.zeros((4, 2))
Out[4]:
array([[ 0., 0.],
[ 0., 0.],
[ 0., 0.],
[ 0., 0.]])
In [5]: np.repeat([7], 10)
Out[5]: array([7, 7, 7, 7, 7, 7, 7, 7, 7, 7])
Объявления val
можно обернуть в общий класс, который будет предоставлять типы шашек.
class Checkers<T> {
val checkNothing: Checker<T> = { Unit }
val checkSomething: Checker<T> = { makeSomeAssertion(it) }
}
Вы можете использовать тип Any
здесь, чтобы принять что-либо:
val checkNothing: Checker<Any> = { Unit }
checkNothing(123)
checkNothing("abc")
val checkSomething: Checker<Any> = { makeSomeAssertion(it) }
checkSomething(123)
checkSomething("abc")
Поскольку ваши шашки здесь являются потребителями, может быть более правильным использовать <in Any>
, а не просто <Any>
; подробнее об этом можно прочитать в справочной документации по дженерикам