如何使用python将elem从一个列表替换为elem

时间:2016-06-22 10:19:18

标签: python

我有名单

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 5, 6, 7]
b = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 13]
c = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k']

我想用

替换它
for (i, j, k) in zip(a, b, c):
     if i == j:
        i = k
        print i
    else:
        continue

但它不能取代所有元素。 欲望输出:

['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'a', 'b', 'e', 'f', 'g']

我该怎么检查?

1 个答案:

答案 0 :(得分:1)

迭代索引列表并从所需列表中获取值。 下次再说清楚了!

new_list = [c[i-1] for i in a]

输出:

['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'a', 'b', 'e', 'f', 'g']

如果您有列表,我不确定您想要实现的目标。 这是一次尝试..

In [13]: [(k,c[i]) for i,k in enumerate(a)]

Out[13]:
[(5439426, 'evg_grach@mail.ru'),
 (5439426, 'sveta1975n@mail.ru'),
 (5439426, 'prosto_yan@bk.ru'),
 (5439426, 'zarbas@rambler.ru'),
 (3653015, 'Platov94@mail.ru'),
 (5439426, 'ya.dempsey@yandex.ru'),
 (5439426, 'Galina_bogdan@bk.ru'),
 (5439426, 'tctmk@yandex.ru'),
 (3653015, 'Kiselevsergej1996@mail.ru'),
 (5439426, 'zastava_85@mail.ru'),
 (5439426, 'Rybochkina.76@mail.ru'),
 (5439426, 'upi88@yandex.ru'),
 (5439426, 'coh@inbox.ru')]

好的,我想我明白了。 这是一个oneliner,它只返回你的目的“有效”值。

In [17]: [c[b.index(i)] for i in a if i in b]

这是较长的版本,保存每个条目。

Out[17]: ['ya.dempsey@yandex.ru', 'ya.dempsey@yandex.ru']

In [18]: l = []

In [19]: for i in a:
   ....:     if i in b:
   ....:         l.append((i, c[b.index(i)]))
   ....:     else:
   ....:         l.append((i, None))
   ....:         

In [20]: l
Out[20]: 
[(5439426, None),
 (5439426, None),
 (5439426, None),
 (5439426, None),
 (3653015, 'ya.dempsey@yandex.ru'),
 (5439426, None),
 (5439426, None),
 (5439426, None),
 (3653015, 'ya.dempsey@yandex.ru'),
 (5439426, None),
 (5439426, None),
 (5439426, None),
 (5439426, None)]