重新创建代码而无需列表理解

时间:2019-05-19 16:08:42

标签: python-3.x sorting for-loop list-comprehension

我正在学习有关列表理解的知识,因此我想在没有列表理解的情况下重新创建代码。

代码如下:

items=[x for x in input().split(",")]
items.sort()
print (items)

这是我重新创建它的方式:

print ("Enter comma seperated words: ")
userinput = input ().split(",")
words = []
for i in range (len(userinput)):
    words.append(userinput)
    words.sort()
print (words)

我希望输出应该按字母顺序排列,但不是。

1 个答案:

答案 0 :(得分:1)

比方说我们的输入就是这个...

userinput = 'foo,bar'

使用列表理解代码...

items=[x for x in userinput.split(",")]
items.sort()
print (items)
Output becomes: `['bar', 'foo']`

但是,如果我们使用您重新创建的代码。

userinput = userinput.split(',')
words = []
for i in range (len(userinput)):
    words.append(userinput)
    words.sort()
print (words)
Output becomes: `[['foo', 'bar']]

这是为什么?

运行行userinput = userinput.split(',')时,userinput现在变成['foo', 'bar']。 因此,运行words.append(userinput)时,它实际上是在说words.append(['foo', 'bar']),因此,您要将一个列表附加到一个表示words = [['foo', 'bar']]的列表中。

words.sort()不会对自身内的嵌套列表进行排序,因此,您的列表未排序。

因此,解决方法是将用户输入的每个元素添加到单词中,而不是将用户输入作为列表添加到单词中。

userinput = userinput.split(',')
words = []
for i in range (len(userinput)):
    words.append(userinput[i])
    words.sort()
print (words)
Output becomes: ['bar', 'foo']