Python通用序列操作

Posted mr-chenshuai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python通用序列操作相关的知识,希望对你有一定的参考价值。

注:

  Python支持容器的数据结构概念

  容器基本上就是可包含其他的对象,两种主要的容器就是序列和映射

  序列中每隔元素都有编号

  映射中每隔元素都有键

 

 


 

通用序列操作

  索引、切片、相加、相乘、、成员资格都适用于所有的序列


 

索引:

  序列中是所有元素都有编码,从0开始递增,可已使用[索引]来访问各个元素

  字符串就是由字符组成,索引0指向第一个元素

name = "shuai"
print(name[0])      # s
print(name[3])      # a

  使用负数索引时,从右往左数,最后一个元素的位置是-1

name = "shuai"
print(name[-1])     # i
print(name[-3])     # u

  对于字面量(所有序列类型均可),可以直接进行索引操作,无需现将其赋值个变量

print("shuai"[3])   # a
print(["a", "b", 2, 5][2] )     # 2

  函数返回一个序列,可以直接进行索引操作

x = input("name:")[3]       # shuai
print(x)    # a

  练习:

months = [
    "January",
    "February",
    "March",
    "April",
    "May",
    "June",
    "July",
    "August",
    "September",
    "October",
    "November",
    "December",
]

endings = ["st", "nd", "rd"] + 17*["th"] + ["st", "nd", "rd"] + 7*["th"] + ["st"]

year = input("year:")
month = input("month:")
day = input("day:")

month_number = int(month)
day_number = int(day)

month_name = months[month_number-1]
ordinal = day + endings[day_number-1]

print(month_name + " " + ordinal + " " + "," + year)

  


 

切片:

  使用切片来访问特定范围内的元素,使用两个索引,用冒号分隔

tag = "<a href=‘http://www.python.org‘>Python web site</a>"
print(tag[9:30])        # http://www.python.org
print(tag[32:-4])       # Python web site

  第一个索引是包含在切片内的,但是第二个索引是不包的,实际上是该索引的前一个元素:前包后不包

numbers = [1,2,3,4,5,6,7,8,9]
print(numbers[3:6])     # [4, 5, 6]
print(numbers[0:1])     # [1]

  

  切片简写:

    访问最后三个元素,可以明确的指出

numbers = [1,2,3,4,5,6,7,8,9]
print(numbers[6:9])     # [7, 8, 9]
print(numbers[-3:-1])       # [7, 8]

    上面发现使用负数索引时不能包含最后一个元素,按照索引前包后不包是规则,是不是应该写0?

numbers = [1,2,3,4,5,6,7,8,9]
print(numbers[-3:0])     # []

    实际上,当第一个索引指定的元素位于第二个索引指定的元素后面时(上面 索引-4的值是7,而0索引的值是 1),结果就是空序列

    简写来了!

    如果切片结束在序列末尾,那么可以不写第二个索引

numbers = [1,2,3,4,5,6,7,8,9]
print(numbers[-3:])     # [7, 8, 9]

    同理,如果切片开始于序列的开头,那么可以省略第一个索引

numbers = [1,2,3,4,5,6,7,8,9]
print(numbers[:3])     # [1, 2, 3]

    要赋值整个序列,可以将两个索引都省略

numbers = [1,2,3,4,5,6,7,8,9]
print(numbers[:])     # [1, 2, 3, 4, 5, 6, 7, 8, 9]

    练习:

url = input("Plese enter the URL:")
domain = url[11:-4]
print("Domain name:" + domain)

# Plese enter the URL:http://www.python.org
# Domain name:python

 


步长:

  切片时,显示或者隐式的指定起点和终点,通常会省略一个参数:步长

  普通的切片中,步长是1,会从第一个元素移动到下个元素,单位就是1,可以看到加了步长参数1时,和步写没有区别

numbers = [1,2,3,4,5,6,7,8,9]
print(numbers[1:6:1])   # [2, 3, 4, 5, 6]
print(numbers[1:6])   # [2, 3, 4, 5, 6]

  当步长改为2时,就会每隔一个元素取一次值

numbers = [1,2,3,4,5,6,7,8,9]
print(numbers[::3])     # [1, 4, 7]
print(numbers[1:6:2])   # [2, 3, 4, 5, 6]
print(numbers[1:6])   # [2, 3, 4, 5, 6]

  步长也可以为负数,即从右往左取元素,但是不能为0

  步长为负数时,第一个索引一定要大于第二个

  省略索引时,步长为正数,从左到右,步长为负数时,从右到左

numbers = [1,2,3,4,5,6,7,8,9]
print(numbers[::-2])     # [9, 7, 5, 3, 1]
print(numbers[::2])     # [1, 3, 5, 7, 9]
print(numbers[1:6:-1])   # []
print(numbers[8:2:-1])   # [9, 8, 7, 6, 5, 4]
print(numbers[::0])     # ValueError: slice step cannot be zero

  


 

序列相加:

  可以使用 + 来拼接序列

  不能拼接不同类型的序列

print(["a", 1, 2] + [3, 4, 5])      # [‘a‘, 1, 2, 3, 4, 5]
print("shuai" + "123")          # shuai123
print("shuai" + [1, 2, 3])      # TypeError: must be str, not list

  


 

乘法:

  将序列和数n相乘时,会重复这个序列n次常见一个新的序列

print("shuai" * 3)      # shuaishuaishuai
print([1, 2, 3] * 5)       # [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]

  None:

    空列表是用[]来创建的,不包含任何内容

    如果要创建一个可包含10个元素的列表,但是没有任何内容,可以使用None,None表示什么都没有

l = [None] * 10
print(l)        # [None, None, None, None, None, None, None, None, None, None]

 


 

成员资格检查:

  使用in来检查指定的值是否包含在序列中,检查是够满足指定的条件,并返回相应的值:满足时返回True,反之返回False

  这样的运算符成为布尔运算符

  布尔值:True或者False

s = "shuai"
print("s" in s)     # True
print("2" in s)     # False

l = [1, 2, 3, 4, 5]
print(1 in l)       # True
print("2" in l)     # False

  


 

长度、最小值、最大值

  内置函数len、min、max

  len函数返回序列包含的元素个数

  min返回序列中最小的元素

  max返回序列中最大的元素

  min和max可以直接提供参数

l = [1, 3, 5, 8, 9, 6]
print(len(l))       # 6
print(min(l))       # 1
print(max(l))       # 9

print(min(1, 5, 7))     # 1
print(max(8, 4, 2))     # 8

  

以上是关于Python通用序列操作的主要内容,如果未能解决你的问题,请参考以下文章

python 序列通用操作

Python 通用的序列操作

Python--数据结构-序列-通用操作

Python通用序列操作

Python中6种内建序列之通用操作

序列的通用操作