Уведомления

Группа в Telegram: @pythonsu

#1 Июль 1, 2014 21:14:30

theproshin
Зарегистрирован: 2014-06-30
Сообщения: 7
Репутация: +  1  -
Профиль   Отправить e-mail  

Двумерный массив (список), итерация по столбцам[row]

Я в замешательстве. Может кто-нибудь сталкивался с задачей:
есть двумерный массив

[[1][a]
 [2][b]
 [3][c]
 [4][d]]
Необходимо получитьт список типа:
[1,2,3,4],
[1,2,3,d],
[1,2,c,4],
[1,2,c,d],
[1,b,3,4],
[1,b,3,d],
[1,b,c,4],
[1,b,c,d],
...
Никто не узнает знакомый алгоритм?

Офлайн

#2 Июль 1, 2014 21:21:52

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Двумерный массив (список), итерация по столбцам[row]

theproshin
Необходимо получитьт список типа:
По какому принципу строится второй список?



Офлайн

#3 Июль 1, 2014 21:28:22

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Двумерный массив (список), итерация по столбцам[row]

Счетчик - маска?

Офлайн

#4 Июль 2, 2014 03:12:53

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Двумерный массив (список), итерация по столбцам[row]

a = [1,'a',
     2,'b',
     3,'c',
     4,'d']
b = []
for i in xrange(16):
	b.append([])
	for i, j in enumerate("%04d"%int(bin(x)[2:])) + bin(i)[2:]):
		b[-1].append(a[i*2+int(j)])
print b



————————————————
-*- Simple is better than complex -*-

Отредактировано terabayt (Июль 2, 2014 05:18:57)

Офлайн

#5 Июль 2, 2014 03:30:01

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Двумерный массив (список), итерация по столбцам[row]

или так

a = [1,'a', 2,'b', 3,'c', 4,'d']
b = [[a[int(i*2+int(j))] for i, j in enumerate('0'*(4-len(bin(x)[2:])) + bin(x)[2:])] for x in xrange(16)]
print b



————————————————
-*- Simple is better than complex -*-

Отредактировано terabayt (Июль 2, 2014 05:18:39)

Офлайн

#6 Июль 2, 2014 06:47:00

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Двумерный массив (список), итерация по столбцам[row]

Мой вчерашний вариант

data = [['1', 'a'],
        ['2', 'b'],
        ['3', 'c'],
        ['4', 'd']]
def mkmask(n, w):
    return map(int, bin(n)[2:].zfill(w))
def domagic(data):
    w = len(data)
    for c in range(1 << w):
        m = mkmask(c, w)
        yield [p[m[i]] for i, p in enumerate(data)]
print(list(domagic(data)))

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version