Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.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_Indexing - Fatal编程技术网

返回列表中字符串中的第二个字母,并按该字母对单词进行排序。保持索引范围超出范围。python

返回列表中字符串中的第二个字母,并按该字母对单词进行排序。保持索引范围超出范围。python,python,indexing,Python,Indexing,我正在完成一项具有以下要求的任务: 您将按照每个元素的第二个字母a到z对以下列表进行排序。创建一个排序时使用的函数,称为second_let。它将接受一个字符串作为输入,并返回该字符串的第二个字母。然后对列表进行排序,创建一个名为sorted_by_second_let的变量,并将排序后的列表分配给它 这是我的代码: ex_lst = ['hi', 'how are you', 'bye', 'apple', 'zebra', 'dance'] def second_let(x):

我正在完成一项具有以下要求的任务:

您将按照每个元素的第二个字母a到z对以下列表进行排序。创建一个排序时使用的函数,称为second_let。它将接受一个字符串作为输入,并返回该字符串的第二个字母。然后对列表进行排序,创建一个名为sorted_by_second_let的变量,并将排序后的列表分配给它

这是我的代码:

ex_lst = ['hi', 'how are you', 'bye', 'apple', 'zebra', 'dance']

def second_let(x):

    lst= []
    for wrd in x:
        lst.append(wrd[1])
    return lst

print(second_let(ex_lst))
print(sorted(second_let(ex_lst)))

sorted_by_second_let= sorted(ex_lst, key= second_let)

我不断地发现这个错误:

索引器:第7行的字符串索引超出范围,这是lst.append(wrd[1])。我做错了什么?我怎样才能做得更好

谢谢。

当你写信时:

sorted_by_second_let= sorted(ex_lst, key=second_let)
这将把每个单词传递到
第二个\u let
。然后在函数中,每个
wrd
将是一个字符,这显然不是您想要的

如果只想按第二个字母排序,则
函数只需返回第二个字母。例如:

ex_lst = ['hi', 'how are you', 'bye', 'apple', 'zebra', 'dance']

sorted(ex_lst, key=lambda x: x[1])
# ['dance', 'zebra', 'hi', 'how are you', 'apple', 'bye']

其中
x
是一个单词,
x[1]
是第二个字母<代码>排序()将处理其余部分

这取决于当它有一个以函数为值的
参数时,
排序
的工作方式:

ex_lst = ['hi', 'how are you', 'bye', 'apple', 'zebra', 'dance']

def second_let(x):
    return x[1]

sorted_by_second_let= sorted(ex_lst, key= second_let)
ex_lst=['hi','how you','bye','apple','zebra','dance']
def第二组(x):
返回x[1]
按第二个字母排序=已排序(前一个字母,键=第二个字母)

像这样使用时,
sorted
函数循环遍历列表中的每个项目。这就是为什么不需要为循环设置

如果有人不喜欢使用
lambda
,您可以使用
itemgetter
。@MarkMeyer非常感谢您的建议。没有Lambda还有别的方法吗?我的作业要求我避免使用lambda,而是创建一个函数“second_let”。@MoutazGendia是的,lambda是一个just a函数,所以你可以使
second_let
像你一样简单地取一个
x
参数,然后
返回x[1]
@MarkMeyer谢谢你,就为了我的理解,这里的x与列表不相似吗(ex_lst)和wrd列表中的项目(str),因此如果我索引x,那么我将索引列表中的项目,而不是wrd中字符中的项目(这里是srting)?我有点困惑。。