Найти - Пользователи
Полная версия: Замена значений списка списков на список
Начало » Python для новичков » Замена значений списка списков на список
1
info.rss
Есть такой список:
[(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')]

dimy44
Зачем вы храните значения в кортежах, если вы хотите именять содержимое? Для этого есть списки.
info.rss
Да верно, не правильно описал задание.
Это образец, цель трансформация простого текстового файла, и может быть представлен в любом виде, в том числе в словарях
dimy44
Вобщем, конкретно по вашему вопросу
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]
как видите, кортежи приходится перезаписывать, вместо того, чтобы просто заменять значения (в списках).
bismigalis
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
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB