Как лучше распаковать этот вложенный кортеж? - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть кортеж с именем records

records =(['foo', 1]),(['bar', 'hello'])

Это ожидаемый результат

expected_result= (['foo','bar'],['1','hello'])

Я создал цикл For для вышеперечисленного и все хорошо

for i in range(len(records[0])):
    for k in range(len(records[1])):
        if i==k:
            j,v = records
            print(j[i],v[i])

Есть ли лучший способ сделать это, используя минимальный код и строки?

Привет

Ответы [ 3 ]

0 голосов
/ 04 сентября 2018

Вот один из способов вернуть кортеж списков:

records = (['foo', 1]), (['bar', 'hello'])
res = tuple(map(list, zip(*records)))

# (['foo', 'bar'], [1, 'hello'])

В отличие от желаемого результата, 1 останется целым числом.

0 голосов
/ 04 сентября 2018

Более питоническим способом было бы создать итератор с функцией zip .

Например:

result = list(zip(*records))

вернет список из двух кортежей:

[('foo', 'bar'), (1, 'hello')]

Вы получите ожидаемый результат (один кортеж из двух списков), используя оба конструктора list и tuple :

expected_result = tuple(list(item) for item in zip(*records))
print(expected_result)

(['foo', 'bar'], [1, 'hello'])
0 голосов
/ 04 сентября 2018

Для списка кортежей:

records =(['foo', 1]),(['bar', 'hello'])

expected_result = list(zip(*records))
expected_result 

[('foo', 'bar'), (1, 'hello')]

Для списка списков:

expected_result = tuple(map(list,zip(*records)))
expected_result

(['foo', 'bar'], [1, 'hello'])

Для кортежей кортежей:

expected_result = tuple(zip(*records))
expected_result

(('foo', 'bar'), (1, 'hello'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...