【问题标题】:Recreate the code without list comprehension在没有列表理解的情况下重新创建代码
【发布时间】:2019-05-19 16:08:41
【问题描述】:

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

代码如下:

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)

我希望输出应该按字母顺序排列,但事实并非如此。

【问题讨论】:

  • 顺便说一句,第一个示例中的列表理解没有做任何有用的事情(因为没有使用x),所以你可以只输入items = input().split(","),你会得到相同的行为。
  • 我有未缩进的 words.sort() 但结果仍然不是按字母顺序排列的。
  • 你想做words.append(userinput(i)),因为你重新创建的结果看起来像[['foo', 'bar']],而不是列表理解中的['foo', bar']
  • 问题是,input.split(',') 返回一个数组,而您在words.append(userinput) 中所做的是将整个数组附加到数组中(因此嵌套它)。 words.sort() 不对嵌套数组进行排序。
  • @Dai words.sort() 是否不缩进并不重要,它只是意味着列表在循环的每次迭代中排序,而不是在循环之后。

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


【解决方案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 作为列表附加到单词中。

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

【讨论】:

    猜你喜欢
    • 2019-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-12
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    相关资源
    最近更新 更多