Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用其他列表中的数据更新列表_Python_List - Fatal编程技术网

Python 使用其他列表中的数据更新列表

Python 使用其他列表中的数据更新列表,python,list,Python,List,我有两个列表,我想创建第三个列表,将这两个列表中的信息结合起来,将值分配给从第一个列表导出的位置,并使用从第二个列表计算的实际值。。。一个例子可能更具解释性: list1 = [ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,0] list2 = [ 0,0,0,1,0,1,1,0,0,0,0,0,0,1,1,0] 我要创建的新列表应包含第二个列表在原始1值间隔内的总和值: list3 = [ 0,0,0,3,3,3,3,3,0,0,0,2,2,2,2,0] 有什么建议吗?我对

我有两个列表,我想创建第三个列表,将这两个列表中的信息结合起来,将值分配给从第一个列表导出的位置,并使用从第二个列表计算的实际值。。。一个例子可能更具解释性:

list1 = [ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,0]
list2 = [ 0,0,0,1,0,1,1,0,0,0,0,0,0,1,1,0]
我要创建的新列表应包含第二个列表在原始1值间隔内的总和值:

list3 = [ 0,0,0,3,3,3,3,3,0,0,0,2,2,2,2,0]
有什么建议吗?我对python非常陌生。 我想用一些itertool,但不是太远


提前感谢您提供的任何提示。

只有一种方法,即检测
列表1中的组并处理
列表2中每个组的相应元素

list1 = [ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,0]
list2 = [ 0,0,0,1,0,1,1,0,0,0,0,0,0,1,1,0]

from itertools import groupby, islice
it2 = iter(list2)
result = []
for k, g in groupby(list1):
    n = len(list(g))
    result += [k * sum(islice(it2, n))] * n

print(result)
印刷品:

[0, 0, 0, 3, 3, 3, 3, 3, 0, 0, 0, 2, 2, 2, 2, 0]

只有一种方法,检测
list1
中的组,并在
list2
中处理每个组的对应元素

list1 = [ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,0]
list2 = [ 0,0,0,1,0,1,1,0,0,0,0,0,0,1,1,0]

from itertools import groupby, islice
it2 = iter(list2)
result = []
for k, g in groupby(list1):
    n = len(list(g))
    result += [k * sum(islice(it2, n))] * n

print(result)
印刷品:

[0, 0, 0, 3, 3, 3, 3, 3, 0, 0, 0, 2, 2, 2, 2, 0]

我不明白这里的逻辑是怎么工作的。1+1如何根据情况给出3或2?(为1+0编辑相同)您的逻辑不清楚,请在列表1中解释我们有两个范围1,从索引3到7,以及11到15。因此,我们将列表2中的范围3-7相加,即3,并将第一个列表中对应的范围替换为该值,与11-15中的索引相同,这些索引在列表2中的总和为2,因此我们将列表1中的索引11-15替换为2。希望这有助于澄清问题。我不明白这里的逻辑应该如何工作。1+1如何根据具体情况给出3或2?(为1+0编辑相同)您的逻辑不清楚,请在列表1中解释我们有两个范围1,从索引3到7,以及11到15。因此,我们将列表2中的范围3-7相加,即3,并将第一个列表中对应的范围替换为该值,与11-15中的索引相同,这些索引在列表2中的总和为2,因此我们将列表1中的索引11-15替换为2。希望能有助于澄清这一点。我最终设法将其压缩到一个列表comp/gen exp.
[v代表u in([k*sum(g)]*len(g)代表k,g in((k,list(zip(*g))[1])代表k,g代表groupby(zip(list1,list2),lambda x:x[0]),代表v代表u]
。对不起。:)@PM2Ring看起来有点复杂:-)。实际上,我也使用
zip(list1,list2)
启动了一个解决方案,但没有完成它,因为我怀疑它会比我上面的解决方案更难看,我不想将任何一个解决方案变成一行程序……哦,我同意这完全是荒谬的,但编写起来很有趣。我本来可以把它缩短一点,但我不想做任何多余的计算。我更明智的版本是
ig0,ig1=itemgetter(0),itemgetter(1)
groupby(zip(list1,list2,ig0)中的k,g:
g=map(ig1,g)
结果。扩展([k*sum(g)]*len g))
,但这比你的还要复杂。谢谢!非常感谢!我最终设法将其压缩到一个comp/genexp列表中。
[v代表u-in([k*sum(g)]*len(g)代表k,g-in((k,list(zip(*g))[1])代表k,g代表groupby(zip(list1,list2),lambda x:x[0])代表v-in-u]
。对不起。:)@PM2Ring看起来有点复杂:-)。实际上,我也使用
zip(list1,list2)
启动了一个解决方案,但没有完成它,因为我怀疑它会比我上面的解决方案更难看,我不想将任何一个解决方案变成一行程序……哦,我同意这完全是荒谬的,但编写起来很有趣。我本来可以把它缩短一点,但我不想做任何多余的计算。我更明智的版本是
ig0,ig1=itemgetter(0),itemgetter(1)
groupby(zip(list1,list2,ig0)中的k,g:
g=map(ig1,g)
结果。扩展([k*sum(g)]*len g))
,但这比你的还要复杂。谢谢!非常感谢!