我有2个列表
a=[2,4,6]
b=[1,3,5,-1,-1,-1]
我必须用列表-1
中的元素替换b
中的a
,然后将b
打印为排序列表
预期
output= [1,2,3,4,5,6]
答案 0 :(得分:4)
您可以使用列表理解并在其上调用sorted()
:
a = [2,4,6]
b = [1,3,5,-1,-1,-1]
a = iter(a)
output = sorted([next(a) if x == -1 else x for x in b])
print(output)
# [1, 2, 3, 4, 5, 6]
答案 1 :(得分:0)
尝试一下:
a=[2,4,6]
b=[1,3,5,-1,-1,-1]
a.reverse()
for i,v in enumerate(b):
if v == -1:
b[i] = a.pop()
然后,您可以根据需要对b
进行排序。
答案 2 :(得分:0)
for i in a:
b[b.index(-1)]=i
b.sort()
以上是您所需要的全部
答案 3 :(得分:0)
您可以使用list.pop()
方法从b
获取下一项,同时也将其删除,然后将整个列表理解内容包装在sorted()
中:
a = [2,4,6]
b = [1,3,5,-1,-1,-1]
a = sorted([b.pop(0) if i == -1 else i
for i in a]
但是,如果要保留列表b
,最好使用next()
上的iter(a)
,如另一个答案中所述。
答案 4 :(得分:0)
如果 public function update($id, Request $request)
{
$et=Model::find($id);
//update some parent table field's (if you want)
$et['type']=$request['type'];
$et['sum'] =preg_replace('/[^0-9]/s', '', $request['sum']); //for remove thousand separtor
$et->save();
$et_det=$et->et_dets()
->pluck('id','id'); // one-to-many relation
for ($i=0;$i<count($request['det_id']);$i++)
{//some matching condition
$createdOrUpdated = Model_dets::updateOrCreate(
[
'parent_id'=>$id,
'total'=>$request['total'][$i]
],
[
'columnA' => $request['columnA'][$i],
'ColumnB' => $request['ColumnB'][$i])
]);
if (!empty($et_det[$createdOrUpdated->id])) {
unset($et_det[$createdOrUpdated->id]);
}
}
if (count($et_det)) {
Model_det::whereIn('id', $et_det)->delete();
}
return Redirect::to('index')->with('alert-success','Update successfully');
}
大于-1
),此详细选项也适用:
len(a