Найти - Пользователи
Полная версия: Порядок вычисления строк.
Начало » Python для новичков » Порядок вычисления строк.
1 2
penzu
Всем доброго дня. Озадачился я одним моментом.
Имеется матрица:

M=[[1,2,3],
      [4,5,6],
      [7,8,9]]

В общем произвожу следующее вычисление:

{sum(row) for row in M}

Результат выполнения:
{24, 6, 15}

Вопрос. Почему он вначале выдает сумму 2 рой строки по индексу , затем 0 , 1 ?


wbt
set([6,12,24])
#set([24, 12, 6])

set не есть упорядоченный список

M=[[1,2,3],
      [4,5,6],
      [7,8,9]]
[sum(row) for row in M]
#[6, 15, 24]
penzu
Прошу прощения, не понял. Можно по подробней ?
wbt
считает он всё правильно. но конструкция { … } - это set, набор. оно не гарантирует, что строчки будут в том же порядке, что зашли в неё.

если заменить { … } на
 [ ... ] 
, то это будет список. в списке оно всё нормально, как и показано в моём коде выше.

>>> tuple(sum(row) for row in M)
(6, 15, 24)
>>> list(sum(row) for row in M)
[6, 15, 24]
>>> set(sum(row) for row in M)
set([24, 6, 15])
penzu
Спасибо
penzu
Может быть ты ещё знаешь…
Есть такое выражение:

{x:ord(x) for x in 'spaam'}
{'a': 97, 'p': 112, 's': 115, 'm': 109}

в данном случае оно возвращает ключи из словаря.
Дак вот, чем выступает переменная X в данном случае ? Обычный список ?
wbt
переменая x здесь выступает переменной x

d = dict()
for x in 'spaam':
    d[x] = ord(x)
print d
# {'a': 97, 'p': 112, 's': 115, 'm': 109}

оно не возвращает ключи из словаря. ‘spaam’ - это, почитай, отсортированный список, и оно создаёт словарь, пять раз заглядывая в переменную x и пять раз создавая ключ и значение на его основе.

>>> for x in 'spaam':
...     print x
... 
s
p
a
a
m

Мне, собственно, непонятно, а в чём вопрос?
Sergei
wbt
считает он всё правильно. но конструкция { … } - это set, набор. оно не гарантирует, что строчки будут в том же порядке, что зашли в неё.если заменить { … } на
справедливости ради,
все же конструкция {} больше похожа на словарь, dictionary :) И да, порядка в словаре нет, он для хранения key-value.
Set - это ()
wbt
в python3 { } - это set

# python3
Python 3.3.2+ (default, Aug  4 2013, 15:50:24) 
[GCC 4.8.1] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> {1,2,3}
{1, 2, 3}
>>> set([1,2,3])
{1, 2, 3}
FishHook
wbt,
третьего у меня под руками нет, но боюсь, что Вы не правы.
сделайте так
print( type({}) )
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB