Каков правильный синтаксис Python для такого понимания списка? - PullRequest
2 голосов
/ 27 сентября 2010

task: {x * y такой, что x принадлежит S & y, является счетчиком итераций}, где S - некоторый другой набор, примерно такой:

Ответы [ 6 ]

4 голосов
/ 27 сентября 2010

для вашего отредактированного вопроса, вы хотите

[i * j for j, i in enumerate(S)]

Python не имеет ++, потому что он проводит четкое различие между утверждениями и выражениями. использовать

[(i + 40) * i for i in xrange(60)]

другой способ сделать это -

[i * j for i, j in enumerate(xrange(60), start=40)]

и еще один способ

[i * j for i, j in zip(xrange(40, 100), xrange(60))]

Я думаю, что первый - лучший способ сделать это, потому что он сокращает количество вызовов функций и является наиболее читабельным.

Также, если вы не знаете, что вам абсолютно необходим список, используйте выражение генератора

((i + 40) * i for i in xrange(60))

Это позволит вам обрабатывать результаты по одному и никогда не сохранять весь список в памяти. Вы можете передать выражение генератора в такие вещи, как sum, max, min и большинство других встроенных функций.

1 голос
/ 27 сентября 2010

Я бы сделал это в генераторе:

def fooGen(S):
    j = 1
    for i in S:
        yield i * j
        J += 1
1 голос
/ 27 сентября 2010

Один из способов сделать это - использовать enumerate в сочетании с range:

[x * (count + 1) for count, x in enumerate(range(40, 100))]

Посмотрите на другие ответы для (многих) других способов сделать это :):)

1 голос
/ 27 сентября 2010
S = range(40,100)
[i*j for i,j in enumerate(S)]
0 голосов
/ 27 сентября 2010

Вы можете использовать текущий индекс элемента в качестве приращения

>>> S=[2,4,6,8]
>>> [i*(S.index(i)+1) for i in S]
[2, 8, 18, 32]
>>> 

поэтому ваш c-ish "j ++" - S.index (i) + 1

0 голосов
/ 27 сентября 2010

"" "
задача: {x * y такой, что x принадлежит S & y - число итераций}, где S - некоторый другой набор
[отрывать неудачное введение i и j]
[s1* 1, s2 * 2, s3 * 3 ...]
"" "

очень простой перевод:

[x * y for y, x in enumerate(S, start=1)]

или

[x * (y + 1) for y, x in enumerate(S)]
...