Добавьте кортеж к списку кортежей в Python

Ищите разрядное смещение, поскольку это - в основном все, что необходимо сделать для свопинга от мало-> обратный порядок байтов. Тогда в зависимости от диаметра долота, Вы изменяетесь, как Вы делаете разрядное смещение.

18
задан Charlie Salts 10 December 2009 в 03:37
поделиться

4 ответа

result = [(x+dx, y+dy) for x,y in points for dx,dy in offsets]

Подробнее см. понимание списка .

33
ответ дан 30 November 2019 в 06:01
поделиться

Если вас не интересуют дубликаты в результате:

result = []
for ox, oy in offsets:
    for px, py in points:
        result.append((px + ox, py + oy))

Если вас волнуют дубликаты в результате:

result = set()
for ox, oy in offsets:
    for px, py in points:
        result.add((px + ox, py + oy))
5
ответ дан 30 November 2019 в 06:01
поделиться

Лично мне нравится ответ Алока. Однако для поклонников itertools эквивалент на основе itertools (в Python 2.6 и более поздних версиях):

import itertools as it
ps = [(x+dx, y+dy) for (x, y), (dx, dy) in it.product(points, offsets)]

Однако в этом случае решение itertools не быстрее, чем простое один (на самом деле он немного медленнее, потому что ему нужно повторно распаковывать каждый x, y для каждого смещения, в то время как простой подход Alok распаковывает каждый x, y только один раз). Тем не менее, itertools.product - отличная альтернатива вложенным циклам в других случаях, так что об этом стоит знать! -)

8
ответ дан 30 November 2019 в 06:01
поделиться

Довольно просто:

>>> rslt = []
>>> for x, y in points:
...     for dx, dy in offsets:
...         rslt.append( (x+dx, y+dy) )
... 
>>> rslt
[(1, 5), (1, 4), (1, 6), (2, 5), (0, 5), (3, 3), (3, 2), (3, 4), (4, 3), (2, 3), (8, 7), (8, 6), (8, 8), (9, 7), (7, 7)]

Перебирайте точки и смещения, затем создайте новые кортежи, добавляя смещения к точкам.

15
ответ дан 30 November 2019 в 06:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: