zoukankan      html  css  js  c++  java
  • python3-切片

    取一个list或tuple的部分元素是非常常见的操作。比如,一个list如下:

    L = ["Michael", "Sarah", "Tracy", "Bob", "Jack"]

    取前3个元素,应该怎么做/

    笨方法:

       

    >>> L[0],L[1],L[2]
    ["Michael", "Sarah", "Tracy"]
    ["Michael","Sarah","Tracy"]

    之所以是笨方法是因为要是取n个数我们就没辙了。

    取前N个元素,也就是索引为0-(N-1)的元素,可以用循环

    >>> L = ["Mercedes","nationality","hand","coat"]
    >>> r = []
    >>> n = 3
    >>> for i in range(n):
    ...  r.append(L[i])
    ...
    >>> r
    ['Mercedes', 'nationality', 'hand']

     对这种经常取指定索引范围的操作用循环十分繁琐,因此,Python提供了切片(Slice)操作符,能大大简化这种操作。

    对应上面 的问题,取三个元素,用一行代码就可以完成切片:

    >>> L[0:3]
    
    ["Michael", "Sarah", "Tracy"]

    L[0:3]表示从索引0的位置开始取,知道索引3结束,但不包括3 即0,1,2正好是三个数

    如果第一个索引是0,还可以省略:

    >>> L[:3]
    ["Michael", "Sarah", "Tracy"]

    也可以从索引1开始,取出两个元素出来:

    L[1:3]
    ["Michael", "Sarah", "Tracy"]

    类似的,既然Python支持L[-1]取倒数第一个元素,那么同样支持倒数切片,试试:

    >>>L[-1]
    ["Bob", "Jack"]
    
    >>>L[-2:-1]
    ["Bob"]

    记住倒数第一个元素的索引是-1;

    切片操作十分有用。我们先创建一个0-99的数列:

    >>>L = list(range(1000))
    >>>L
    [0,1,2,3...,99]

    可以通过切片轻松取出某一段数列。比如前10几个数:

    L[:10]
    [0,1,2,3,4,5,6,7,8,9]

    后10个数:

    >>>L[-10:]
    [90,91,92,93,94,95,96,97,98,99]

    前11-20个数:

    >>>L[10:20]
    [10,11,12,13,14,15,16,17,18,19]

    前10个数每两个取一个:

    >>>L[10:20]
    [10,11,12,13,14,15,16,17,18,19]

    所有数,每5个取一个:

    >>>L[::5]
    [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]

    甚至什么都不写,只写[:]就可以原样复制一个list:

    >>> L[:]
    [0, 1, 2, 3, ..., 99]

    tuple也是一种list,唯一的区别就是tuple不可变因此,tuple也可以用切片操作,只是操作的结果仍然是tuple

    >>>(0,1,2,3,4,5)[:3]
    (0,1,2)

    字符串“XXX”也可以看成是一种list,每个元素就是一个字符。因此,字符串也可以用切片操作,只是操作结果仍然是字符串:

    >>> "ABCDEFG"[:3]
    'ABC'
    
    >>> "ABCDEFG"[::2]
    "ACEG"

    在很多编程语言中,针对字符串提供了很多各种截取函数(例如substring),其实目地就是对字符串切片,Pythonm没有对字符串的截取函数,只需要切片一个操作就可以完成,非常简单

  • 相关阅读:
    day02:Activity
    day01:Android快速入门
    解读经典《C#高级编程》第七版 Page79-93.对象和类型.Chapter3
    解读经典《C#高级编程》第七版 Page68-79.对象和类型.Chapter3
    基于.Net进行前端开发的技术栈发展路线(一)
    解读经典《C#高级编程》第七版 Page50-68.核心C#.Chapter2
    解读经典《C#高级编程》第七版 Page45-50.核心C#.Chapter2
    解读经典《C#高级编程》第七版 Page38-45.核心C#.Chapter2
    解读经典《C#高级编程》第七版 Page32-38.核心C#.Chapter2
    解读经典《C#高级编程》第七版 Page20-32.核心C#.Chapter2
  • 原文地址:https://www.cnblogs.com/qjuly/p/9219885.html
Copyright © 2011-2022 走看看