Pythonic方法生成可能的数组列表

时间:2015-08-31 12:00:49

标签: python

给定一个数组(例如[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

2 个答案:

答案 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 == 1False == 0

这一事实
result = [[v + (i==j) for j, v in enumerate(test)] for i in range(len(test))]