给定一个数组(例如[3,5,2]),我试图生成一个可能的数组列表,这些数组是在数组中添加1到1个条目得到的:[[4,5,2] ,[3,6,2],[3,5,3]]。
我可以通过以下方式完成它,但想知道是否有更多的pythonic方式来获得结果?
test = [3, 5, 2]
result = [t.copy() for _ in range(len(test))]
for index, _ in enumerate(result):
result[index][index] += 1
答案 0 :(得分:6)
以下是如何使用列表解析:
public function postExcel(Request $request)
{
if($request->ajax()) {
if ($request->hasFile('file'))
{
$file = $request->file('file');
$filename = $file->getClientOriginalName();
//$file->getRealPath();
$path = $file->move(public_path(), $filename);
\Excel::load($path, function($reader){
$results = $reader->toArray();
});
print_r($results);die();
$json = array(
'status' => 'ok',
'array' => $results
);
}
return Response::json($json);
}
}
<强>输出强>
$(document).on("change", "#file-input", function() {
var formData = new FormData($('form.upload-excel')[0]);
$.ajax({
type: 'POST',
data: formData,
url: '/Excel/public/upload-excel',
cache: false,
contentType: false,
processData: false,
success: function(data){
if(data.status === 'ok') {
console.log(data.array);
$('#table').DataTable({
colReorder: true,
});
}
}
});
});
答案 1 :(得分:2)
这是列表理解的另一个内联解决方案:
test = [3, 5, 2]
result = [[v+1 if i==j else v for j, v in enumerate(test)] for i in range(len(test))]
或者,PM 2Ring注意到,您可以利用True == 1
和False == 0
:
result = [[v + (i==j) for j, v in enumerate(test)] for i in range(len(test))]