Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 10, 2014 12:36:14

info.rss
Зарегистрирован: 2014-01-12
Сообщения: 33
Репутация: +  0  -
Профиль   Отправить e-mail  

Замена значений списка списков на список

Есть такой список:

[(1, 11, u'a', u'w'), 
(1, 24, u'пd', u'fпр'), 
(1, 44, u'dы', u'fав'), 
(2, 66, u'аd', u'f'), 
(2, 24, u'd', u'f' ), 
(4, 5, u'd', u'sd')]

нужно заменить первые значения: 1,1,1,2,2,4
есть соответственный список других значений:
l2 = [12, 48, 99]

хотелось бы получить:
[(12, 11, u'a', u'w'), 
(12, 24, u'пd', u'fпр'), 
(12, 44, u'dы', u'fав'), 
(48, 66, u'аd', u'f'), 
(48, 24, u'd', u'f' ), 
(99, 5, u'd', u'sd')]

Офлайн

#2 Ноя. 10, 2014 14:13:47

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

Замена значений списка списков на список

Зачем вы храните значения в кортежах, если вы хотите именять содержимое? Для этого есть списки.

Офлайн

#3 Ноя. 10, 2014 14:43:35

info.rss
Зарегистрирован: 2014-01-12
Сообщения: 33
Репутация: +  0  -
Профиль   Отправить e-mail  

Замена значений списка списков на список

Да верно, не правильно описал задание.
Это образец, цель трансформация простого текстового файла, и может быть представлен в любом виде, в том числе в словарях

Отредактировано info.rss (Ноя. 10, 2014 14:45:45)

Офлайн

#4 Ноя. 10, 2014 17:04:51

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

Замена значений списка списков на список

Вобщем, конкретно по вашему вопросу

lst = [(1, 11, u'a', u'w'),  (1, 24, u'пd', u'fпр'),  (1, 44, u'dы', u'fав'),  (2, 66, u'аd', u'f'),  (2, 24, u'd', u'f' ),  (4, 5, u'd', u'sd')]
dict_replace = {1: 12, 2: 48, 4: 99}
lst_new = [(dict_replace[i[0]],) + i[1:] for i in lst]
как видите, кортежи приходится перезаписывать, вместо того, чтобы просто заменять значения (в списках).

Офлайн

#5 Ноя. 11, 2014 08:28:11

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

Замена значений списка списков на список

l1 = [(1, 11, u'a', u'w'),
      (1, 24, u'пd', u'fпр'),
      (1, 44, u'dы', u'fав'),
      (2, 66, u'аd', u'f'),
      (2, 24, u'd', u'f'),
      (4, 5, u'd', u'sd')]
l2 = [12, 48, 99]
test_res = [(12, 11, u'a', u'w'),
            (12, 24, u'пd', u'fпр'),
            (12, 44, u'dы', u'fав'),
            (48, 66, u'аd', u'f'),
            (48, 24, u'd', u'f'),
            (99, 5, u'd', u'sd')]
from itertools import groupby
from operator import itemgetter
def genych(lst, seeds):
    seeds.reverse()
    for _, group in groupby(lst, itemgetter(0)):
        seed = seeds.pop()
        for item in group:
            yield tuple([seed] + list(item[1:]))
res = list(genych(l1, l2))
assert res == test_res

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version