Python 如何将值从一个列表传递到另一个列表?

Python 如何将值从一个列表传递到另一个列表?,python,python-2.7,Python,Python 2.7,假设你有3张清单 List1 = [['_', '_', '_'], ['_', '_', '_'], ['_','_','_']] List2 = [['Test', 'Word', 'Sudo'], ['Fu', 'Lu', 'Shou'], ['Ham', 'Spam', 'Eggs']] List3 = [3, 5, 7,] 使用列表3中的值,我想将'Fu'从列表2[0][2]转移到列表1[0][2],因为列表3的第一个值是3,这意味着从列表2的列表2[0][2]中取第三个从0开始计数

假设你有3张清单

List1 = [['_', '_', '_'], ['_', '_', '_'], ['_','_','_']]
List2 = [['Test', 'Word', 'Sudo'], ['Fu', 'Lu', 'Shou'], ['Ham', 'Spam', 'Eggs']]
List3 = [3, 5, 7,]
使用列表3中的值,我想将'Fu'从列表2[0][2]转移到列表1[0][2],因为列表3的第一个值是3,这意味着从列表2的列表2[0][2]中取第三个从0开始计数的值,并将其放置到与列表1相同的位置

使用列表3中的其他值,最终结果应为:

List1 = [['_', '_', 'Fu'], ['_', 'Shou', '_'], ['Spam','_','_']]
我已经做了几个小时了,但是没法让它工作



如何做到这一点?

将每个三元组列表作为一个列表,进行传输,然后将它们分成3个组不是更容易吗?所有子列表的长度都相同吗?@Jaynathan我认为这是多余的,因为子列表必须再次添加到一起@米吉尔森!是的,所有的子列表都是相同的长度第三个值在索引2 0我想如果你“展平”你的列表,你可能会有一个非常简单的时间:。。。在另一个步骤中,您可以将列表重新分块将每个三元组列表作为一个列表,进行传输,然后将它们分成3个组不是更容易吗?所有子列表的长度都相同吗?@Jaynathan我认为这是多余的,因为子列表必须再次添加到一起@米吉尔森!是的,所有的子列表都是相同的长度第三个值在索引2 0我想如果你“展平”你的列表,你可能会有一个非常简单的时间:。。。在另一个步骤中,你可以重新分块你的列表沙哈,是的,我可以这么做,但你的很多代码我甚至还不明白!嗯,的代码更简单,我想对您的任务来说更有效,但想法是一样的。如果我是你,我会用他的代码=哈哈,是的,我可以这么做,但是你的很多代码我都还不懂!嗯,的代码更简单,我想对您的任务来说更有效,但想法是一样的。如果我是你,我会使用他的代码=非常感谢!我认为这个答案是最好的,非常简单易懂。早些时候有人发布了同样的答案,我很幸运地抄下了代码,但当我刷新页面时,答案不见了。所以我尝试了这个代码,在我看来这是最有效的,非常简单!你能解释一下这是怎么回事吗?我想我理解了一点,但我对这个方法的工作原理还不太清楚!第三个列表是一维数组。它应该被分解成二维数组。这里第一个是内部列表的位置,第二个是每个成员在该内部列表中的位置。非常感谢!我认为这个答案是最好的,非常简单易懂。早些时候有人发布了同样的答案,我很幸运地抄下了代码,但当我刷新页面时,答案不见了。所以我尝试了这个代码,在我看来这是最有效的,非常简单!你能解释一下这是怎么回事吗?我想我理解了一点,但我对这个方法的工作原理还不太清楚!第三个列表是一维数组。它应该被分解成二维数组。这里首先是内部列表的位置,其次是每个成员在该内部列表中的位置。考虑到它获得了很多声誉,这是一个很棒的代码。但是,我不太明白:\哦,我明白了,我现在明白了,divmod是除法模,q是x/3,r是x%3,这是一个很棒的代码,考虑到它得到了很多声誉。然而,我不太明白:\哦,我明白了,我现在明白了,divmod是除法模,q是x/3,r是x%3,非常有趣,但太复杂了,你不觉得吗?是的,我喜欢你选择的最佳答案。我的第一个想法是将列表展平,因为我不想做模数学:有趣,但太复杂了,你不觉得吗?是的,我喜欢你选择的最佳答案。我的第一个想法是将列表展平,因为我不想做模数学:
In [184]: List1 = [['_', '_', '_'], ['_', '_', '_'], ['_','_','_']]

In [185]: List2 = [['Test', 'Word', 'Sudo'], ['Fu', 'Lu', 'Shou'], ['Ham', 'Spam', 'Eggs']]

In [186]: List3 = [3, 5, 7,]

In [187]: for x in List3:
    q,r=divmod(x,3)
    List1[q][r]=List2[q][r]
   .....:     

In [188]: List1
Out[188]: [['_', '_', '_'], ['Fu', '_', 'Shou'], ['_', 'Spam', '_']]
>>> List1 = [['_', '_', '_'], ['_', '_', '_'], ['_','_','_']]
>>> List2 = [['Test', 'Word', 'Sudo'], ['Fu', 'Lu', 'Shou'], ['Ham', 'Spam', 'Eggs']]
>>> List3 = [3, 5, 7,]
>>> List4 = [item for sublist in List1 for item in sublist]
>>> List5 = [item for sublist in List2 for item in sublist]
>>> for val in List3:
...     List4[val] = List5[val]
>>> List1 = [ List4[i:i+3] for i in xrange(0,len(List4),3) ]
# If you must have original data as lists of lists:
def flat(lst):
    ret = []
    for x in lst:
        if hasattr(x, '__iter__'):
            ret += flat(x)
        else:
            ret.append(x)
    return ret

List1 = [['_', '_', '_'], ['_', '_', '_'], ['_','_','_']]
List2 = [['Test', 'Word', 'Sudo'], ['Fu', 'Lu', 'Shou'], ['Ham', 'Spam', 'Eggs']]
List3 = [3, 5, 7,]

lst1 = flat(List1)
lst2 = flat(List2)

# Now given flat lists, you can just do this:
def splitby(x, n=3):
    i = iter(x)
    while True:
        yield [next(i) for _ in range(n)]

for i in List3:
    lst1[i] = lst2[i]

print list(splitby(lst1))
for index in List3:
    first, second = index/3, index%3 
    List1[first][second] = List2[first][second]
print List1