将1个列表中的项目替换为python中另一个列表中的项目

时间:2011-12-10 07:39:49

标签: python list

我正在尝试用另一个列表列表中的项目替换1个列表列表中的项目。

    alist = [[1,2,3], [4,5,6], [7,8,9]]
    blist = [[a,b,c], [d,e,f], [g,h,i]]

基本上,我想用它的blist替换alist中的项目。例如,如果有人在alist中选择了1,我想用blist中的相同索引替换它,这将是一个。

    alist = [[a,2,3], [4,5,6], [7,8,9]]

有什么建议吗?

3 个答案:

答案 0 :(得分:2)

一种方法是将两个列表循环在一起,然后遍历每个子组以替换匹配的选项。

对于锁步迭代, zip 函数是您最好的朋友。对于转换列表, list comprehension 是一个很棒的工具。以下是如何使用它们:

>>> alist = [[1,2,3], [4,5,6], [7,8,9]]
>>> blist = [[10,20,30], [40,50,60], [70,80,90]]
>>> choice = 1
>>> alist = [[(bx if ax==choice else ax) for ax, bx in zip(aseq, bseq)] for aseq, bseq in zip(alist, blist)]
>>> alist
[[10, 2, 3], [4, 5, 6], [7, 8, 9]]

这种方法的好处在于它可以进行多次替换(例如,如果 alist 包含多个1条目,它们都将被替换为 blist )。

另一个不错的功能是ax==choice决策很容易被其他谓词替换(例如,ax in {2, 5, 8}将在一次传递中搜索多个替换目标)。另一个例子是ax % 2 == 0,它会对任何 alist 值进行 blist 替换。甚至)。

答案 1 :(得分:1)

>>> z = [(i, x.index(item)) for i, x in enumerate(alist) if item in x][0]
>>> alist[z[0]][z[1]] = blist[z[0]][z[1]]
>>> alist
[['a', 2, 3], [4, 5, 6], [7, 8, 9]]

查看在线工作:ideone

答案 2 :(得分:0)

原油但很容易解释:

blist = [['a','b','c'], ['d','e','f'], ['g','h','i']]
alist = [[1,2,3], [4,5,2], [7,8,9]]
x = 2

for y in xrange(len(alist)):
    if x in alist[y]:
        i = alist[y].index(x)
        alist[y][i] = blist[y][i]

print alist

输出:

[[1, 'b', 3], [4, 5, 'f'], [7, 8, 9]]