【问题标题】:Slicing python list into new python lists将 python 列表切片成新的 python 列表
【发布时间】:2014-11-16 04:35:50
【问题描述】:

我试图将一个列表分成三个新列表,但我的方法似乎有问题。你们能帮我看看我应该怎么做吗?谢谢!

quiz = [[91, 94, 38, 48, 70, 85, 94, 59], [78, 96, 90, 55, 77, 82, 94, 60], [99, 94, 82, 77, 75, 89, 94, 93], [49, 92, 75, 48, 80, 95, 99, 98]]
midterm = []
final = []

我尝试进行测验以获取列表的前五个数字,期中然后具有接下来的两个数字,期末具有列表的最后一个数字:

quiz = [[91, 94, 38, 48, 70,], [78, 96, 90, 55, 77], [99, 94, 82, 77, 75,], [49, 92, 75, 48, 80]]
midterm = [[85, 94,],[82, 94,], [89, 94,], [95, 99,]]
final = [[59], [60], [93], [98]]

这是我的代码:

quiz = [[91, 94, 38, 48, 70, 85, 94, 59], [78, 96, 90, 55, 77, 82, 94, 60], [99, 94, 82, 77, 75, 89, 94, 93], [49, 92, 75, 48, 80, 95, 99, 98]]
midterm = quiz[5:2]
final = midterm[5:1]

【问题讨论】:

  • 您遇到的具体问题是什么?

标签: python list slice


【解决方案1】:
midterm = [i[5:7] for i in quiz]
final = [i[7:] for i in quiz]
quiz = [i[:5] for i in quiz]

这是如何工作的:

[ ] 是 for 循环的精简版本。 比如上面的代码和下面的代码是一样的:

for i in quiz:
    midterm.append(i[5:7])
for i in quiz:
    final.append(i[7:])

tmp = []
for i in quiz:
    tmp.append(i[:5])
quiz = tmp

这几乎遍历了测验中的所有元素,并将两个、一个和五个用于单独的数组。你做错了,你没有把 quiz 当作一个二维数组,而是当作一个一维数组。

您当前的代码将数组测验的第二个到第五个元素用于期中考试,这恰好是第二个到第五个整数数组,而不是测验中每个数组中的第二个到第五个整数。

【讨论】:

    【解决方案2】:

    给你:使用list comprehension

    >>> quiz = [[91, 94, 38, 48, 70, 85, 94, 59], [78, 96, 90, 55, 77, 82, 94, 60], [99, 94,  82, 77, 75, 89, 94, 93], [49, 92, 75, 48, 80, 95, 99, 98]]
    >>> new_quiz = [ x[:5] for x in quiz ]
    >>> mid_term = [ x[5:7] for x in quiz ]
    >>> final = [ x[-1:] for x in quiz ]
    >>> new_quiz
    [[91, 94, 38, 48, 70], [78, 96, 90, 55, 77], [99, 94, 82, 77, 75], [49, 92, 75, 48, 80]]
    >>> mid_term
    [[85, 94], [82, 94], [89, 94], [95, 99]]
    >>> final
    [[59], [60], [93], [98]]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-24
      • 2015-02-19
      • 2014-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多