zoukankan      html  css  js  c++  java
  • Python常见序列详解

    一、Python中序列的分类


      常见序列类型包括字符串(普通字符串和unicode字符串),列表和元组.所谓序列,即成员有序排列,可通过下标访问. 

     

    二、Python序列通用操作


      下面我们将分别以字符串、列表和元组为例来说明对序列的操作

    1. 索引

      序列中的元素都是有序的、拥有自己编号(从0开始),我们可以通过索引得到序列中对应的元素:

      索引也可以为负值,负数索引表示从右往左开始计数,最后一个元素索引为-1,倒数第二为-2,以此类推.

    >>> s = 'abcdefg'
    >>> s[0]
    'a'
    >>> s[1]
    'b'
    >>> s[-1]
    'g'
    >>> 
    >>> l = [1,2,3,4,5,6,7]
    >>> l[4]
    5
    >>> l[0]
    1
    >>> l[-1]
    7
    >>> 
    >>> t = (1,2,3,4,5,6,7)
    >>> t[0]
    1
    >>> t[-1]
    7
    >>> t[4]
    5
    >>> s[::-1]
    'gfedcba'

     

      2. 切片(分片)

      使用索引可以获取单个元素,使用分片可以获取序列中指定范围内的元素.切片操作符[:]/[::]

    • obj[start_index:end_index] 表示获取从start_index开始到end_index-1结束所有索引对应的元素

      切片中冒号左边索引对应的元素晚于右边索引对应元素出现时,返回结果是[]

    >>> l
    [1, 2, 3, 4, 5, 6, 7]
    >>> 
    >>> l[0:5]
    [1, 2, 3, 4, 5]
    >>> l[4:6]
    [5, 6]
    >>> l[2:2] []
    >>> l[-3:-1]          
    [5, 6]
    >>> l[-1:-3]
    []


    • obj[:end_index] 表示获取从0开始到end_index-1结束所有索引对应的元素  
    • obj[start_index:] 表示获取start_index对应的元素以及后面所有的元素
    • obj[:] 表示获取所有的元素
    >>> l[:5]
    [1, 2, 3, 4, 5]
    >>> l[2:]
    [3, 4, 5, 6, 7]
    >>> l[-2:]
    [6, 7]
    >>> l[:-3]
    [1, 2, 3, 4]
    >>> l[:]
    [1,2,3,4,5,6,7]
    >>> s[:5]
    'abcde'
    >>> s[1:]
    'bcdefg'
    >>> s[1::2]
    'bdf'
    
    
    • [start_index:end_index:step] (step>0)表示从start_index索引对应的元素开始每step个元素取出来一个,直到取到end_index对应的元素结束(step默认为1)
    >>> ll[0:9:]
    [1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> ll[0:9:1]
    [1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> ll[0:9:2]
    [1, 3, 5, 7, 9]
    >>> ll[::4]
    [1, 5, 9]
    >>> s[::-2]
    'geca'
    >>>
    • [start_index:end_index:step] (step<0)表示从右到左反向提取元素,即从start_index索引对应的元素开始反向每step个元素取出来一个,直到取到end_index+1对应的元素结束.

      此时start_index对应的元素要晚于end_index对应的元素出现,否则返回[]

    >>> ll[0:6:-2]
    []
    >>> ll[9:6:-2]
    [10, 8]
    >>> ll[6:9:-2]
    []
    >>> ll[::-1]
    [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
    >>> ll[:2:-3]
    [10, 7, 4]
    >>> ll[9:2:-1]
    [10, 9, 8, 7, 6, 5, 4]

      2. 加法

      两种相同的序列才可以进行加法操作

    >>> l1=[1,2,4]
    >>> l2=[4,5,6]
    >>> l3=['9','10']
    >>> l1+l2
    [1, 2, 4, 4, 5, 6]
    >>> l1+l3
    [1, 2, 4, '9', '10']
    >>> l1+'abcdefg'
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: can only concatenate list (not "str") to list

      3.乘法

    >>> 'python'*2
    'pythonpython'
    >>> [1,2,3,4,5]*2
    [1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
    >>> ('a','b')*2
    ('a', 'b', 'a', 'b')
    >>> 

      4.成员资格

    >>> s
    'abcdefg'
    >>> t
    (1, 2, 3, 4, 5, 6, 7)
    >>> l
    [1, 2, 3, 4, 5, 6, 7]
    >>> 
    >>> 
    >>> if 'ab' in s and 'c' in s:
    ...  print 'yes'
    ... else:
    ...  print 'no'
    ... 
    yes
    >>> if 5 in l and 6 in t:
    ...  print 'yes'
    ... else:
    ...  print 'no'
    ... 
    yes
    >>> 
    >>> if 10 in l:
    ...  print 'yes'
    ... else:
    ...  print 'no'
    ... 
    no

    >>> 10 in t
    False
    >>> 3 in t
    True
    >>> 'a' in s
    True

      4.最大值、最小值、长度

    >>> len(s)
    7
    >>> len(l)
    7
    >>> len(t)
    7
    >>> max(s)
    'g'
    >>> max(l)
    7
    >>> max(t)
    7
    >>> min(s)
    'a'
    >>> min(l)
    1
    >>> min(t)
    1

    三、列表(list)

    列表和字符串、元组最大的区别为列表可变,字符串和元祖不可变


      1.list函数 创建列表

    >>> s
    'abcdefg'
    >>> t
    (1, 2, 3, 4, 5, 6, 7)
    >>> list(s) ['a', 'b', 'c', 'd', 'e', 'f', 'g'] >>> list(t) [1, 2, 3, 4, 5, 6, 7]

      2.通过赋值改变列表

    >>> l
    [1, 2, 3, 4, 5, 6, 7]
    >>> 
    >>> l[1], l[2] = 10, 100
    >>> l
    [1, 10, 100, 4, 5, 6, 7]

      3.删除列表元素

    >>> l
    [1, 2, 3, 4, 5, 6, 7]
    >>> 
    >>> l[1], l[2] = 10, 100
    >>> l
    [1, 10, 100, 4, 5, 6, 7]
    >>> 
    >>> del l[0]
    >>> l
    [10, 100, 4, 5, 6, 7]
    >>> del l[3:]
    >>> l
    [10, 100, 4]

      4.列表分片赋值

    #赋值
    >>> l=range(10) >>> l [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> l[:3] = 'abcdefg' >>> l ['a', 'b', 'c', 'd', 'e', 'f', 'g', 3, 4, 5, 6, 7, 8, 9] >>> l[:7] = 'xy' >>> l ['x', 'y', 3, 4, 5, 6, 7, 8, 9] >>>
    >>> l=range(10)
    >>> l
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> l[:3] = ['x','yy']
    >>> l
    ['x', 'yy', 3, 4, 5, 6, 7, 8, 9]
    >>>
    #插入
    >>> l=range(10)
    >>> l
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> l[2:2]=[u'在第三个元素插入']
    >>> l
    [0, 1, u'u5728u7b2cu4e09u4e2au5143u7d20u63d2u5165', 2, 3, 4, 5, 6, 7, 8, 9]
    >>>
    #删除
    >>> l=range(10)
    >>> l
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> l[1:4] = ''  #等价于del l[1:4]
    >>> l
    [0, 4, 5, 6, 7, 8, 9]
    >>> l=range(10)
    >>> l
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> l[1:4] = []
    >>> l
    [0, 4, 5, 6, 7, 8, 9]
    >>>

      5.列表方法

    • append 在列表尾部增加元素
    >>> l=[1,2,3,4]
    >>> l.append(5)
    >>> l.append(['acb'])
    >>> l
    [1, 2, 3, 4, 5, ['acb']]
    • count统计元素出现的个数
    >>> l
    [1, 2, 3, 2, 12, 3, 53, 1, 2]
    >>> for i in l:
    ...  print i,'-->',l.count(i)
    ... 
    1 --> 2
    2 --> 3
    3 --> 2
    2 --> 3
    12 --> 1
    3 --> 2
    53 --> 1
    1 --> 2
    2 --> 3

    #元祖乱入----->
    >>> t
    (1, 2, 3, 4)
    >>> for i in t:
    ...  print i,'-->',t.count(i)
    ...
    1 --> 1
    2 --> 1
    3 --> 1
    4 --> 1
    • extend扩展原有列表

      貌似列表的加法也可以"扩展列表"实际上"+"只是生成了一个新的列表,被连接的两个列表均没有改变,extend体现了列表的可变性

    >>> l=range(5)
    >>> l
    [0, 1, 2, 3, 4]
    >>> l_add = [5,6,7,8]
    >>> l.extend(l_add)
    >>> l
    [0, 1, 2, 3, 4, 5, 6, 7, 8]
    >>> 
    >>> l+l_add
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 5, 6, 7, 8]
    >>> l
    [0, 1, 2, 3, 4, 5, 6, 7, 8]

      

    • index找出某一元素第一次出现位置的索引  
    >>> l
    [0, 1, 2, 3, 4, 5, 6, 7, 8]
    >>> l.index(3)
    3
    >>> l=[1,2,1,2,2,1]
    >>> l.index(2)
    1
    • insert(index,obj)将obj插入列表index索引前面  
    >>> l
    [1, 2, 1, 2, 2, 1]
    >>> l.insert(0,'first')
    >>> l
    ['first', 1, 2, 1, 2, 2, 1]
    >>> l.insert(-1,'end')
    >>> l
    ['first', 1, 2, 1, 2, 2, 'end', 1]
    >>> l.insert(3,'cc')
    >>> l
    ['first', 1, 2, 'cc', 1, 2, 2, 'end', 1]
    >>> 
    • pop(index)移除列表中index索引对应的元素,默认inex=-1
    >>> l
    ['first', 1, 2, 'cc', 1, 2, 2, 'end', 1]
    >>> l.pop()
    1
    >>> l
    ['first', 1, 2, 'cc', 1, 2, 2, 'end']
    >>> l.pop(2)
    2
    >>> l
    ['first', 1, 'cc', 1, 2, 2, 'end']
    • rmove(obj)移除列表中匹配到obj的第一个元素
    >>> l
    ['first', 1, 'cc', 1, 2,
    >>> l.remove(1) >>> l ['first', 'cc', 1, 2, 2]
    • reverse转置列表
    >>> l
    ['first', 'cc', 1, 2, 2]
    >>> l.reverse()
    >>> l
    [2, 2, 1, 'cc', 'first']
    • sort给列表排序
    >>> l
    [2, 2, 1, 'cc', 'first']
    >>> l.sort()
    >>> l
    [1, 2, 2, 'cc', 'first']
    >>> l.reverse()
    >>> l
    ['first', 'cc', 2, 2, 1]
    >>> sorted(l)
    [1, 2, 2, 'cc', 'first']
    >>> l
    ['first', 'cc', 2, 2, 1]
    >>>

     、元组(tuple) 

      不可变序列

      1.创建元组

    >>> t1=(1,2,3)
    >>> t2=1,2,3,
    >>> t3='a',
    >>> t1
    (1, 2, 3)
    >>> t2
    (1, 2, 3)
    >>> t3
    ('a',)
    #创建有一个元素的元组必须有逗号
    >>> single_tuple=(2)
    >>> single_tuple
    2
    >>> single_tuple=(2,)
    >>> single_tuple
    (2,)
    >>>

      2.touple函数

    >>> tuple([1,2,3])
    (1, 2, 3)
    >>> tuple('abc')
    ('a', 'b', 'c')
    >>> tuple((1,2,3))
    (1, 2, 3)

     

      3.元组方法

    • count
    • index

    五、字符串(不可变序列)

      1.字符换基本操作

      参见上面有关序列的操作.

      

      2.格式化字符串 

    >>> print 'price:%s'%123
    price:123
    
    >>> print u'宽度示例:%f'%3.145926
    宽度示例:3.145926
    
    >>> print u'宽度精度示例:%16.2f'%3.145926
    字段宽度和精度:            3.14
    
    
    >>> print u'0可以填充不足位数:%16.2f'%3.145926
    0可以填充不足位数:            3.14
    >>> print u'0可以填充不足位数:%016.2f'%3.1415926
    0可以填充不足位数:0000000000003.14
    
    
    >>> print u'-表示左对齐:%10.2f'%3.1415926
    -表示左对齐:      3.14
    >>> 
    >>> print u'-表示左对齐:%-10.2f'%3.1415926
    -表示左对齐:3.14  
    
    
    >>> print u'空格表示正数前面加空格:% d'%-10+'
    '+u'空格表示正数前面加空格:% d'%5
    空格表示正数前面加空格:-10
    空格表示正数前面加空格: 5
    >>> print u'空格表示正数前面加空格:%d'%-10+'
    '+u'空格表示正数前面加空格:%d'%5
    空格表示整数前面加空格:-10
    空格表示整数前面加空格:5
    
    >>> print u'+表示无论正负都带着正负号:%+d'%-10+'
    '+u'+表示无论正负都带着正负号:%+d'%5
    +表示无论正负都带着正负号:-10
    +表示无论正负都带着正负号:+5
    >>> print u'+表示无论正负都带着正负号:%+d'%-10+'
    '+u'+表示无论正负都带着正负号:%+d'%5
    +表示无论正负都带着正负号:-10
    +表示无论正负都带着正负号:+5

      3.常用字符串方法

      参考菜鸟教程关于字符串讲解

    string.capitalize()
    把字符串的第一个字符大写,其他小写
    >>> s
    'aJJKbcefzxwu'
    >>> s.capitalize()
    'Ajjkbcefzxwu'

    string.center(width) 返回一个原字符串居中,并使用空格填充至长度 width 的新字符串 >>> s.center(20)
    '    aJJKbcefzxwu    '

    string.count(str, beg
    =0, end=len(string)) 返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数 >>> s.count('J')
    2
    string.decode(encoding
    ='UTF-8', errors='strict') 以 encoding 指定的编码格式解码 string,如果出错默认报一个 ValueError 的 异 常 , 除 非 errors 指 定 的 是 'ignore' 或 者'replace'
    string.encode(encoding='UTF-8', errors='strict') 以 encoding 指定的编码格式编码 string,如果出错默认报一个ValueError 的异常,除非 errors 指定的是'ignore'或者'replace'

    string.endswith(obj, beg
    =0, end=len(string)) 检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False.
    >>> s.endswith('q')
    False
    string.find(str, beg=0, end=len(string)) 检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1
    >>> s.find('J')
    1
    >>>

    string.index(str, beg=0, end=len(string)) 跟find()方法一样,只不过如果str不在 string中会报一个异常.
    >>> s.index('q')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: substring not found
    >>> s.index('a')
    0
    string.isalnum() 如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False
    >>> s.isalnum()
    True
    >>> ss='2345'
    >>> ss.isalnum()
    True
    >>> '3232fsfsdf'.isalnum()
    True
    >>> sss="12_45"
    >>> sss.isalnum()
    False
    string.isalpha() 如果 string 至少有一个字符并且所有字符都是字母则返回 True,否则返回 False
    >>> sss.isal
    sss.isalnum( sss.isalpha(
    >>> sss.isalpha()
    False
    >>> ss.isalpha()
    False
    >>> s.isalpha()
    True

    string.isdigit() 如果 string 只包含数字则返回 True 否则返回 False.
    >>> sss.isdigit()
    False
    >>> ss.isdigit()
    True
    >>> s.isdigit()
    False
    string.islower() 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False
    >>> ssss='123abc'
    >>> ssss.islower()
    True
    string.isspace() 如果 string 中只包含空格,则返回 True,否则返回 False.
    >>> ' '.isspace()
    True
    >>> '1 '.isspace()
    False

    string.istitle() 如果 string 是标题化的(见 title())则返回 True,否则返回 False
    >>> 'Tjksskd'.istitle()
    True
    >>> 'Tjkss2kd'.istitle()
    False
    >>> 'Tjksskd'.istitle()
    True
    >>> 'TjkssFkd'.istitle()
    False

    string.isupper() 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False
    >>> 'AAAA_2323'.isupper()
    True
    >>> 'AAAAe_2323'.isupper()
    False

    string.join(seq) 以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串
    >>> '-'.join(['1','2','3','4'])
    '1-2-3-4'

    string.ljust(width) 返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串 string.rjust(width) 返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串
    >>> s.ljust(20)
    'aJJKbcefzxwu        '
    >>> s.rjust(20)
    '        aJJKbcefzxwu'
    >>> s.center(20)
    '    aJJKbcefzxwu    '

    string.lower() 转换 string 中所有大写字符为小写.
    >>> 'AAAAbbbb'.lower()
    'aaaabbbb'
    >>> 'AAAAbbb12b'.lower()
    'aaaabbb12b'

    string.lstrip() 截掉 string 左边的空格
    string.rstrip() 删除 string 字符串末尾的空格.
    string.strip([obj]) 在 string 上执行 lstrip()和 rstrip()
    >>> '   fafsafs   '.lstrip()
    'fafsafs   '
    >>> '   fafsafs   '.rstrip()
    '   fafsafs'
    >>> '   fafsafs   '.strip()
    'fafsafs'
    max(str) 返回字符串 str 中最大的字母。 min(str) 返回字符串 str 中最小的字母。
    >>> max(s)
    'z'
    >>> min(s)
    'J'

    string.rfind(str, beg
    =0,end=len(string) ) 类似于 find()函数,不过是从右边开始查找.
    >>> s
    'aJJKbcefzxwu'
    >>> s.rfind('J')
    2 string.rindex( str, beg
    =0,end=len(string)) 类似于 index(),不过是从右边开始. string.split(str="", num) 以 str 为分隔符切片 string,如果 num有指定值,则仅分隔 num次 >>> s2.split('-',3)
    ['a', 'b', 'c', 'd-e-f']
    >>> s2.split('-',1)
    ['a', 'b-c-d-e-f']

    string.splitlines(keepends=False) 按照行(
    ' ', ' ', ')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。
    >>> test='a bc d fsfe oopq'
    >>> test.splitlines()
    ['a bc d', 'fsfe', 'oopq']
    >>> test.splitlines(True)
    ['a bc d ', 'fsfe ', 'oopq']
    >>>
    string.startswith(obj, beg=0,end=len(string)) 检查字符串是否是以 obj 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查. string.swapcase() 翻转 string 中的大小写
    >>> 'aAbBcC'.swapcase()
    'AaBbCc'

    string.title() 返回
    "标题化"的 string,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle())
    >>> 'aAbBcC'.title()
    'Aabbcc'

    string.upper() 转换 string 中的小写字母为大写
    >>> 'a12bcMM'.upper()
    'A12BCMM'
    string.zfill(width) 返回长度为 width 的字符串,原字符串 string 右对齐,前面填充0
    >>> s
    'aJJKbcefzxwu'
    >>> s.zfill(30)
    '000000000000000000aJJKbcefzxwu'

      

  • 相关阅读:
    c++ 启发式搜索解决八数码问题
    基于linux或windows的c/s的循环服务器求一元二次方程的根
    基于linux或windows平台上的c/s简单通信
    第七章总结
    第六章总结
    第五章总结
    第四章总结
    第一章总结
    第三章总结
    第二章总结
  • 原文地址:https://www.cnblogs.com/diaosir/p/6575891.html
Copyright © 2011-2022 走看看