zoukankan      html  css  js  c++  java
  • python之列表和元组

    python之列表和元组

    1、 定义序列:使用一对中括号将序列中的元素值括起来。

      names = [“bill”,”30”,”12.5”,”True”]

    
    
    names = ["Bill","Mike"]
    numbers =[1,2,3,4,5,6]
    salary=[3000.0,4000.0,5000.0]
    flags=[True,False,True,True]
    values=[names,numbers,salary,flags,['a','b']]
    for value in values:
        print(value)

    value序列共有五个元素值,每一个元素值都是一个序列,而且这些序列的元素个数都不相同。

    2、序列的基本操作

          序列支持很多特定的操作,这些操作所有类型的序列都可以使用。如通过索引引用序列元素(indexing)、分片(slicing)、加(adding)、乘(multiplying)以及检查某个元素是否属于序列的成员,除此之外,Python语言还可以计算序列的长度,找出最大的元素和最小的元素,以及对序列的迭代。

        2.1通过索引操作序列元素

              序列总所有元素都是有编号的,编号从0开始递增。序列中的所有元素都可以通过编号访问,这个编号被称为索引。访问并输出序列names中的第1个和第3个元素。

    names = ["Bill","Mike","Jack"]
    print(names[0])
    print(names[2])
    s="Hello World"
    print("Apple"[2])
    print(s[0])
    print(s[3])

         在上面代码中,通过索引2获取了字符串Apple的第三个字符。

         通过input输入的字符串也可以通过索引引用其中的某个字符。

        输入一个年份,如果只对年份的最后一个字符感兴趣,获取使用索截取年份的最后一位数字。

    fourth= input('请输入年份:')[3]
    print(fourth

    如果索引是0或正整数,那么Python语言会从序列左侧第一个元素开始取值;如果索引是负数,那么会从序列右侧第一个元素开始取值。序列最后一个元素的索引是-1,倒数第2个元素索引是-2,以此类推。

    例题1

            

    months = [
        '一月',
        '二月',
        '三月',
        '四月',
        '五月',
        '六月',
        '七月',
        '八月',
        '九月',
        '十月',
        '十一月',
        '十二月'
    ]
    year = input("年:")
    month =input('月(1-12):')
    day = input('日(1-31):')
    monthNumber =int(month)#将字符串形式的月转换为数值形式的月
    monthName = months[monthNumber - 1]#从序列中获取中文的月份
    print(year + "" + monthName +" " + day + "")#按指定格式输入年月日

     3、分片

         分片操作是从序列A中获取一个子序列B。序列A可以称为父序列。从A中获取B,需要指定B在A中的开始索引和结束索引,因此,分片操作需要指定两个索引。

        通过分片操作获取一个URL的一级域名和完整的域名。

    url ='https://geekori.com'
    print(url[8:15])
    print(url[8:19])

     在指定子序列结束索引时,要指定子序列最后一个元素的下一个元素的索引。

    通过将结束索引设为0,获取一个空序列。[-3:0]-----------[].如果要使用负数作为索引,并且获取的子序列的最后一个元素与父序列的最后一个元素相同,那么可以省略结束索引,或结束索引引用整数。

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

     [1,2,3]

    [1,2,3,4,5,6,7,8]

         设置步长

         在对序列分片时,默认步长是1,也就是说,获取子序列的元素都是相邻的。如果要获取不相邻的元素,就需要指定步长。

    numbers =[1,2,3,4,5,6,7,8,9]
    print(numbers[:7:2])
    print(numbers[::2])
    print(numbers[3::2])
    print(numbers[8:2:-2])
    print(numbers[8:2:-1])
    #print(numbers[1:6:0])抛出异常,步长不能为0,但可以是负数,如果步长是负数,分片会从序列的右侧开始,这时开始索引要大于结束索引
    print(numbers[:3:-2])#从序列最后一个元素开始,步长为-2,一直到索引为4的元素结束

    str=input("请输入一个整数")
    n=int(str);
    numbers = range(1,n)#产生包含1到n的数值类型的序列
    numbers1=numbers[0::2]#分片获取序列中的奇数
    numbers2=numbers[1::2]#分片获取序列中的偶数
    for number in numbers1:  #在第一行输出所有奇数
        print(number,end=" ")
    print("")
    print(" ",end="")
    for number in numbers2:  #在第二行错位输出所有偶数
        print(number,end=" ")

    4、序列相加

    对应序列首位相接,由于字符串属于字符序列,所以字符串相加也可以看作序列相加。但一个字符串不能和一个序列相加,否则会抛出异常。

    print([1,2,3]+[6,7,8])
    print("Hello"+"world")
    print([1,2,3]+["hello"])#把字符串作为序列的一个元素
    print([1,2,3] +['h','e','l','l','o'])
    print([1,2,3] +"hello")#抛出异常

     5、序列的乘法

      

    #本例通过字符串与数字相乘,复制字符串;通过将序列与数字相乘,复制序列
    print('hello'*5)
    print([20]*10)
    print([None]*6)

    spaceNum=5#表示*号每一侧最多的的空格数,本例是5
    i =1
    lineSpaceNum=spaceNum#表示当前行的前后空格数
    triangle=[]#二维列表
    #开始生成三角形
    while lineSpaceNum>=0:
        #生成星号左侧空格序列
        leftSpaceList=[' ']*lineSpaceNum
        #生成星号列表
        starList=['*']*(2*i-1)
        # 生成星号右侧空格序列
        rightSpaceList = [' '] * lineSpaceNum
        #生成每一行的序列
        lineList=leftSpaceList +starList +rightSpaceList
        triangle.append(lineList)
        lineSpaceNum-=1
        i+=1
    for line in triangle:
        print(line)

     检查某一个值是否属于一个序列,可以使用in运算符(布尔运算符,也就是说,如果某个值属于一个序列,那么in运算符返回True,否则返回False)

    例子:判断一个字符串是否属于另一个字符串,以及一个值是否属于一个序列

    str ="I love you"
    print("you" in str)
    print("hello" in str)
    names=["Bill","Mike","John"]
    print("Mike" in names)
    print("Mary" in names)

     例题;

       

    account= [                        #保存了多条用户记录的序列
        ["geekori","123456"],
        ["bill","54321"],
        ["superman","65432"],
        ["androidguy","6543"],
        ["mike435","65abcd"]
    ]
    username=input("用户名:")
    password = input("密码:")
    #用in运算符判断一个序列是否属于account
    if[username,password] in account:
        print("登陆成功")
    else:
        print("登陆失败")

     6、序列的长度、最大值和最小值

    values=[10,40,5,76,33,2,-12]
    print(len(values))
    print(max(values))
    print(min(values))
    print(max(4,3,2,5))
    print(min(6,5,4))
    print(max("abc",5,4))#字符串和数字不能比较,将抛出异常
    list=["x",5,4]
    print(min(list))#字符串和数字不能比较,将抛出异常

     7、列表的基本操作

       列表可以使用所有适用于序列的标准操作,例如索引、分片、连接和乘法。但列表还有一些属于自己的操作,如修改列表本事的操作,这些操作包括元素赋值、删除、分片赋值以及下一节要讲的列表方法。

        7.1列表元素的赋值

            如果要修改列表中的某一个元素,可以像使用数组一样对列表中的特定元素赋值,也就是使用一对中括号指定元素在列表中的索引,然后使用赋值运算符(=)进行赋值

    s=["Bill","Mike","John"]
    s[0]="Mary"
    s[1]=20
    print(s)
    #输出['Mary', 20, 'John']

    7.2删除列表元素

    numbers=[1,2,3,4,5,6,7,8]

    del numbers[2]

    7.3分片赋值

         分片赋值和分片获取子列表一样,也需要使用分片操作,也就是需要指定要操作的列表的范围。

    s=["hello","world","yeah"]
    s[1:]=["a","b","c"]#将列表元素从第二个元素开始替换成一个新的列表
    print(s)
    name=list("Mike")#使用list函数将“Mike”转换成由字符组成的列表
    print(name)
    name[1:]=list("ary")#利用分片赋值操作将“Mike”替换成了Mary
    print(name)
    s=["hello","world","yeah"]
    s[1:]=["a","b","c"]#将列表元素从第二个元素开始替换成一个新的列表
    print(s)
    name=list("Mike")#使用list函数将“Mike”转换成由字符组成的列表
    print(name)
    name[1:]=list("ary")#利用分片赋值操作将“Mike”替换成了Mary
    print(name)

    numbers =[1,6,7]
    numbers[1:1]=[2,3,4,5] #(:)前面的数字表示要替换的子列表的第一个元素在父列表中的索引,而冒号后面的数字表示子列表下一个元素在父列表中的索引,所以冒号前后两个数字相等,表示不替换列表中任何元素
    print(numbers)
    numbers[1:4]=[]#使用分片赋值将第2、3、4个元素值替换成了空列表。
    print(numbers)

    7.4列表方法

       方法:其实方法和函数非常类似,只是函数是全局的,而方法需要定义在类中,需要通过对象引用。

    #使用sort方法排序,会直接修改原列表,如果要想对列表的副本进行排序,可以使用下面两种方法
    #方法1:使用分片进行操作
    x = [5,4,1,8,6]
    y=x[:]
    y.sort();
    print(x)
    print(y)
    #方法2:使用sorted函数
    x=[7,6,4,8,5]
    y=sorted(x)
    print(x)
    print(y)
    print("-----测试append方法-------")#在列表最后插入新的值
    numbers =[1,2,3,4]
    numbers.append(5)
    print(numbers)
    numbers.append([6,7])#将列表[6,7]作为一个值添加到numbers列表后面
    print(numbers)
    print("-----测试clear方法-------")#用于清除列表内容
    names=["Mike","Mary","Jack"]
    print(names)
    names.clear();
    print(names)
    print("-----测试copy方法-------")#用于复制一个列表
    a=[1,2,3]
    b=a
    b[1]=30
    print(a)
    aa=[1,2,3]
    bb=aa.copy()#bb是aa的副本
    bb[1]=30#修改bb中的元素值,aa中的元素值不会有任何变化
    print(aa)
    print("-----测试count方法-------")#用于统计某个元素在列表中出现的次数
    search=["he","new","he","he","world","peter",[1,2,3],"ok",[1,2,3]]
    print(search.count("he"))
    print(search.count([1,2,3]))
    print("-----测试extend方法-------")#
    a=[1,2,3]
    b=[4,5,6]
    a.extend(b)#将b列表接在a列表的后面,extend方法并不返回值
    print(a)
    print("-----测试index方法-------")
    s=["I","love","python"];
    print(s.index("python"))#查询索引位置,如查询的不在会抛出异常
    print("-----测试insert方法-------")
    numbers=[1,2,3,4,5]
    numbers.insert(3,"four")
    print(numbers)
    print("-----测试pop方法-------")
    numbers=[1,2,3]
    #pop方法返回删除的元素值
    print(numbers.pop())#删除numbers列表中的最后一个元素值
    print(numbers.pop(0))#删除numbers列表中第一个元素值
    print(numbers)
    print("-----测试remove方法-------")
    words=["he","new","he","yes","bike"]
    words.remove("he")
    print(words)
    print("-----测试reverse方法-------")
    numbers=[1,2,3,4,5,6]
    numbers.reverse()
    print(numbers)
    print("-----测试sort方法-------")
    numbers=[5,4,1,7,4,2]
    numbers.sort()#默认元素值按升序排序
    print(numbers)
    
    #sorted可以对任何序列进行排序
    print(sorted("geekori"))
    
    x=[5,4,1,7,5]
    x.sort(reversed=True)
    print(x)
    E:anaconda3python.exe F:/pycharmtext/src/列表方法.py
    -----测试append方法-------
    [1, 2, 3, 4, 5]
    [1, 2, 3, 4, 5, [6, 7]]
    Traceback (most recent call last):
    -----测试clear方法-------
    ['Mike', 'Mary', 'Jack']
    []
    -----测试copy方法-------
      File "F:/pycharmtext/src/列表方法.py", line 60, in <module>
    [1, 30, 3]
    [1, 2, 3]
        x.sort(reversed=True)
    -----测试count方法-------
    TypeError: 'reversed' is an invalid keyword argument for sort()
    3
    2
    -----测试extend方法-------
    [1, 2, 3, 4, 5, 6]
    -----测试index方法-------
    2
    -----测试insert方法-------
    [1, 2, 3, 'four', 4, 5]
    -----测试pop方法-------
    3
    1
    [2]
    -----测试remove方法-------
    ['new', 'he', 'yes', 'bike']
    -----测试reverse方法-------
    [6, 5, 4, 3, 2, 1]
    -----测试sort方法-------
    [1, 2, 4, 4, 5, 7]
    ['e', 'e', 'g', 'i', 'k', 'o', 'r']
    
    Process finished with exit code 1
    E:anaconda3python.exe F:/pycharmtext/src/列表方法.py
    -----测试append方法-------
    [1, 2, 3, 4, 5]
    [1, 2, 3, 4, 5, [6, 7]]
    Traceback (most recent call last):
    -----测试clear方法-------
    ['Mike', 'Mary', 'Jack']
    []
    -----测试copy方法-------
      File "F:/pycharmtext/src/列表方法.py", line 60, in <module>
    [1, 30, 3]
    [1, 2, 3]
        x.sort(reversed=True)
    -----测试count方法-------
    TypeError: 'reversed' is an invalid keyword argument for sort()
    3
    2
    -----测试extend方法-------
    [1, 2, 3, 4, 5, 6]
    -----测试index方法-------
    2
    -----测试insert方法-------
    [1, 2, 3, 'four', 4, 5]
    -----测试pop方法-------
    3
    1
    [2]
    -----测试remove方法-------
    ['new', 'he', 'yes', 'bike']
    -----测试reverse方法-------
    [6, 5, 4, 3, 2, 1]
    -----测试sort方法-------
    [1, 2, 4, 4, 5, 7]
    ['e', 'e', 'g', 'i', 'k', 'o', 'r']
    
    Process finished with exit code 1

     8元组

      元组与列表一样,也是一种序列。唯一不同的是元组不能修改,也就是说,元组是只读的。定义元组非常简单,只需要用逗号(,)分隔一些值即可。

    numbers=1,2,3   #创建元组
    print(numbers)
    names=("Bill","Mike","Jack")
    print(names)
    values=40, #创建一个值的元组
    print(values)
    #生成5个同样值的元组
    print(5*(12 + 4,))
    #不是元组是一个数
    print(5*(12+4))
    #将一个序列转换位元组(tuple函数)
    print(tuple([1,2,3]))
    print(tuple("geekori"))
    E:anaconda3python.exe F:/pycharmtext/src/元组.py
    (1, 2, 3)
    ('Bill', 'Mike', 'Jack')
    (40,)
    (16, 16, 16, 16, 16)
    80
    (1, 2, 3)
    ('g', 'e', 'e', 'k', 'o', 'r', 'i')
    
    Process finished with exit code 0

    有两个重要原因必须要使用元组。

      (1)元组可以在映射中作为键值使用,而列表不能这么用。

       (2)很多内建函数和方法的返回值就是元组,也就是说,如果要使用这些内建的函数和方法的返回值,就必须使用元组。

  • 相关阅读:
    大道至简第一章和java理论学时第一节。感受。
    jQuery基础
    JavaScript对象及初始面向对象
    使用JavaScript操作DOM
    JavaScript操作BOM对象
    JavaScript基础
    实体之间的对应关系
    MySQL常用函数
    SQL Server中分离附加数据及生成SQL脚本
    C#中子类构造函数
  • 原文地址:https://www.cnblogs.com/lcy1995/p/11619542.html
Copyright © 2011-2022 走看看