Форум сайта python.su
0
Не понимаю в чем ошибка:
for i,c in enumerate(array): if c[i] > c[i+1]:
Отредактировано johniek_comp (Июнь 1, 2012 19:18:54)
Офлайн
0
По-видимому, в array содержатся объекты, имеющие тип ‘int’ - числа
__getitem__ - специальный метод, позволяющий получить элемент по индексу или ключу
>>> s = 'python' >>> s.__getitem__(0) 'p' >>> s[0] 'p' >>> n = 1025 >>> n.__getitem__(3) Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'int' object has no attribute '__getitem__'
>>> for i, c in enumerate([10, 20, 30, 40, 50]): ... i, type(c) ... (0, <type 'int'>) (1, <type 'int'>) (2, <type 'int'>) (3, <type 'int'>) (4, <type 'int'>)
>>> array = [1,5,3,8,9,0,4,3] >>> for i in range(len(array)): ... try: ... array[i] > array[i+1] ... except IndexError: ... pass
Отредактировано Cryo (Июнь 1, 2012 20:25:16)
Офлайн
173
CryoПроще без try:
Можно было написать так:
for i in range(len(array) - 1): ...
Офлайн
14
enumerate
Офлайн
-2
johniek_compВ c у тебя будет не array, а его элемент. Надо так:
Не понимаю в чем ошибка:for i,c in enumerate(array): if c[i] > c[i+1]:
TypeError: ‘int’ object has no attribute ‘__getitem__’
for i,c in enumerate(array): if array[i] > array[i+1]:
prev = array[0] for i in array: if prev > i: #... prev = i
Отредактировано asilyator (Июнь 1, 2012 23:34:32)
Офлайн
52
asilyator, зачем повторять то, что уже было сказано выше?
Cryo
Нужно понимать, что твоя переменная с - это на каждой итерации каждый последующий элемент в массиве array, но не сам array
asilyator
В c у тебя будет не array, а его элемент
>>> array = [1,2,3] >>> for i,c in enumerate(array): ... if array[i] > array[i+1]: ... pass ... Traceback (most recent call last): File "<input>", line 2, in <module> IndexError: list index out of range
prev = array[0] for i in array: if prev > i: #... prev = i
Офлайн
-2
fata1exНаписал быстрее, чем прочитал тред, что дальше?
asilyator, зачем повторять то, что уже было сказано выше?
fata1exЭт почему?
А глядя на это, сразу хочется посоветовать почитать базовую литературу по программированию. Так не пишут.
Офлайн
857
asilyatorэлемент сравнивается с самим собой
Эт почему?
>>> array = [1, 2, 3, 4, 5, 1, 2, 3, 4, 5] >>> for i in range(1, len(array)): ... print(array[i - 1] > array[i]) ... False False False False True False False False False >>>
Офлайн
568
ИМХО самое православное решение будет таким
a = [1, 2, 3, 4, 5, 1, 2, 3, 4, 5,7] for p, n in zip(a[:-1], a[1:]): ... print p>n False False False False True False False False False False
Офлайн
52
asilyator, плюс к замечанию py.user.next то, что в вашем варианте нам приходится держать в голове больше деталей, чем при варианте с доступом по индексу. И это в коде, где всего несколько строк. Подобные вещи довольно быстро захламляют программу.
FishHook, решение красивое, но слишком сложное :)
Отредактировано fata1ex (Июнь 2, 2012 13:59:07)
Офлайн