为什么sorted()不对我的字符串列表进行排序?

时间:2019-08-24 09:38:37

标签: python-3.x list sorting

问题:

所以我试图按字母顺序对我的字符串列表进行排序,也许我忽略了一些非常小的问题。我已经尝试了.sort和sorted(),但也许我没有正确执行?

这是我的代码:

words = input("Words: ")
list1 = []
list1.append(words.split())
print(sorted(list1))

预期输出-

Input: "a b d c"
Output: ['a', 'b', 'c', 'd']

当前输出-

Input: "a b d c" 
Output: [['a', 'b', 'd', 'c']]

3 个答案:

答案 0 :(得分:2)

您的代码不起作用,因为您正在尝试对列表内的列表进行排序。

当您致电words.split()时,它将返回list。因此,当您执行list1.append(words.split())时,它会将列表追加到list1中。

您应该这样做:

words = input("Words: ")

list1 = words.split()

print(sorted(list1))

答案 1 :(得分:1)

您可以尝试以下简单方法:

public function index(Request $request)
    {   
    $user = $request->user();

    $feedbacks = Feedback::query()
    ->when($user->hasRole('admin') !== true, function (Builder $query) use ($user) {
        $query->whereHas('user', function ($query) use ($user) {
            $query->where('email', $user->email);
    });
    })
    ->when($request->has('search'), function (Builder $query) use ($request) {
     $query->join('students', 'feedbacks.fk_student', '=', 'students.id')->orderBy('students.name', 'asc')->where('students.name','like','%'.$request->input('search').'%');
     })
    ->paginate(5);

    return view('admin.feedbacks.index', compact('feedbacks'))
        ->with('display_search', $user->hasRole('admin'));
}

我已经测试过了。它正在工作

答案 2 :(得分:0)

在不背离当前工作的情况下,您需要做的唯一修改就是修改代码:

words = input("Words: ")
list1 = []
list1.append(words.split())
print(sorted(list1[0]))

您在做什么错的说明:

造成混乱的根本原因是 append() 。根据python docs append() 仅采用了一个论点

所以当您这样做时,

words.split()

您尝试将多个元素添加到list1中,并且当您在列表中 append() 时,< em>它作为嵌套列表(即另一个列表内的列表)追加。

为支持我的解释,您可以看到您的代码已通过简单的[0]

进行了修复
print(sorted(list1[0]))

这是因为您的输入存储为列表的列表,并且存储在第一个索引中(注意点-python列表中的第一个索引为0,因此使用list1[0]

请让我知道,如果我能以更简单的方式对其进行解释,或者是否有其他混淆可以帮助上述解释。