zoukankan      html  css  js  c++  java
  • Python基础(4)——字符串、列表、元组、字典

    一、字符串 String:

    •双引号或者单引号中的数据,就是字符串
    *切片的语法:[起始:结束:步长]:

    起始与结束值分别为半开半闭区间,如下在sublime的IPython下运行:


    >>> name = 'abcdefg'
    >>> name[0]  #以下标访问字符串中的元素
    'a'
    >>> len(name)  #len()函数求出字符串长度
    7
    >>> name[0:len(name)-1]
    'abcdef'
    >>> name[0:len(name)]  #对比发现范围为半开半闭
    'abcdefg'


    关于步长


    >>> name[1:4:2]  #步长为跨越的字符个数 从1开始到3结束 跨越两个字符输出
    'bd'
    >>> name[::-1]  # 步长为-1表示逆向输出
    'gfedcba'

    字符串中的常用函数方法


    >>> str1 = 'hello world,python'
    >>> str1.find('py',0,len(str1))  #find()方法用来字符串匹配,并返回第一处匹配的位置,从下标0到结尾寻找
    12
    >>> str1.find(' ')
    5
    >>> str1.find('a')  #没有找到  返回-1
    -1
    >>> str1.index("hello",0,len(str1)) #index()方法类似于find()但是匹配失败会返回异常
    0
    >>> str1.index("Hello",0,len(str1))
    Traceback (most recent call last):
      File "<console>", line 1, in <module>
    ValueError: substring not found
    
    
    >>> str1.count("h",0,len(str1)) #count()方法表示统计目标字符出现次数  后面两个参数分别表示起始与结束位置
    2
    >>> str1.replace("h","r",str1.count("h")) #replace()方法表示将h替换为r,并且替换h出现的次数
    'rello world,pytron'
    >>> str1.split(" ")  #字符串分割方法
    ['hello', 'world,python']
    >>> str1.split(",",2)  #2表示分割次数
    ['hello world', 'python']
    >>> str1 = "hello world Python"
    >>> str1.startswith("h")  #判断是否以h开头
    True
    >>> str1.startswith("w",5)  #判断str1[5]是否为w
    False
    >>> str1.startswith("w",6)  #判断str1[6]是否为w
    True
    >>> str.endswith("n")  #类似于startswith()
    True
    >>> str.endswith("j")
    False
    >>> str1.strip("h")  #strip() 方法用于移除字符串头尾指定的字符(默认为空格)
    'ello world Python'
    >>> str1.capitalize()  #首字母大写
    'Hello world python'
    >>> str.rjust(30,"0")  #rjust() 返回一个原字符串右对齐,并使用空格填充至长度 30 的新字符串。如果指定的长度小于			  #字符串的长度则返回原字符串。
    '000000000000Hello world python'
    >>> str.ljust(30,"0")  #类似于rjust()
    'Hello world python000000000000' 
    >>> str.center(30," ")   #以30的宽度居中显示,并填充空格
    '      Hello world python      '
    >>> str.center(30,"-")
    '------Hello world python------'

    index()与rindex()的区别:相对称的关系,和KMP算法有点相似
    >>> s = "love Python,dislike Python"
    >>> s.index("Python")  #返回左边第一个子串'python'的下标
    5
    >>> s.rindex("Python")  #返回右边第一个子串'python'的下标
    20

    列举一道字符串分割题目
    返回使用空格或者' '分割后的倒数第二个子串  str = "haha nihao a   height woshi nide hao pengyou"

    有些迷惑人的题目,据说是面试题,分析题意后大概理解应该用字符串分割方法来解决,但是里面包含了制表符,空格,换行,怎样进行分割?可以回归分割方法的原始定义:


    split()方法语法:
    str.split(str="", num=string.count(str)).
    str -- 分隔符,默认为所有的空字符,包括空格、换行( )、制表符( )等。

    num -- 分割次数。


    看出当split()不加参数时,默认对空格,换行,制表符进行分割
    因此应该用不带参数的分割方法

    str = "haha nihao a  	 height 	 woshi nide 	 hao 
    pengyou"
    str1 = str.split()
    print(str1[-2])

    结果为  'hao'


    二、列表 List:


    序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。
    Python有6个序列的内置类型,但最常见的是列表和元组。
    序列都可以进行的操作包括索引,切片,加,乘,检查成员。
    此外,Python已经内置确定序列的长度以及确定最大和最小的元素的方法。
    列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。
    列表的数据项不需要具有相同的类型
    创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示:

    >>> names = ['liubei','guanyu','zhangfei',3]
    >>> names[0]
    'liubei'
    >>> names[len(names)-1]
    3
    >>> names[len(names)-2]
    'zhangfei'

    与字符串的索引一样,列表索引从0开始。列表可以进行截取、组合等。


    列表相关操作:
    •in(存在),如果存在那么结果为true,否则为false
    •not in(不存在),如果不存在那么结果为true,否则false

    #-*-coding:utf-8-*-
    #列表添加元素操作
    names = ['liubei','guanyu','zhangfei',3]
    for x in names:  #利用for遍历列表
    	print(x)
    i = 0
    while i < len(names): #利用while遍历列表
    	print(names[i])
    	i += 1
    str = ["wangbo","dxnaicnl","cnewiu"]
    names.extend(str) #整个添加进去
    names.insert(4,"xnsac") #下标添加  位置4添加“xnsac”
    for x in names:
    	print(x)

    #-*-coding:utf-8-*-
    #定义变量A,默认有3个元素
    A = ["xiaoWang","xiaoZhang","xiaoHua"]
    print("------添加之前,列表A的元素------")
    for tempName in A:
    	print(tempName)
    print("
    ")
    #提示并添加元素
    A[1] = "xiaoLu"  #修改元素
    temp = raw_input("请输入要添加的学生姓名:") #Python 2.7 下raw_input
    A.append(temp)  #单个元素添加到末尾
    print("
    ")
    #添加完成后,遍历输出添加后的列表
    print("------添加之后列表A的元素-------")
    for tempName in A:
    	print(tempName)
    print("
    ")
    
    
    #待查找的列表
    #A = ["xiaoWang","xiaoZhang","xiaoHua"]
    #获取用户要查找的元素
    findName = raw_input("请输入需要查找的名字:")
    #进行遍历查找
    if findName in A:
    	print("他在列表中!")
    elif findName not in A:
    	print("他不在列表中!")
    
    
    #获取用户要删除的元素
    delName = raw_input("请输入要删除的人:")
    #进行删除操作
    A.remove(delName)
    #遍历输出
    print("-------删除后列表A的元素-------")
    for tempName in A:
    	print(tempName)
    print("
    ")
    
    
    del A[0] #删除第一个元素
    for tempName in A:
    	print(tempName)
    print("
    ")
    
    
    A.pop() # 删除末尾元素  并返回末尾元素
    for tempName in A:
    	print(tempName)
    print("
    ")

    对列表元素进行排序
    >>> a = [3,6,4,2,14]
    >>> a.sort() # 表示从小到大
    >>> a
    [2, 3, 4, 6, 14]
    >>> a.sort(reverse = True)  #表示从大到小
    >>> a
    [14, 6, 4, 3, 2]
    
    
    >>> a = ["a","b","f","d"]
    >>> a.sort()  # 对字符串列表进行排序
    >>> a
    ['a', 'b', 'd', 'f']

    三、元组 Tup


    Python的元组与列表类似,不同之处在于元组的元素不能修改
    元组使用小括号,列表使用方括号
    元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。
    如下实例:

    tup1 = ('physics', 'chemistry', 1997, 2000);
    tup2 = (1, 2, 3, 4, 5 );
    tup3 = "a", "b", "c", "d";

    创建空元组
    tup1 = ();


    元组中只包含一个元素时,需要在元素后面添加逗号:
    tup1 = (50,);


    元组与字符串类似,下标索引从0开始,可以进行截取,组合等。
    例如:



    >>> a = ('a', 'b', 'c', 'a', 'b')
    >>> a.count("b")  #输出b的个数  count方法
    2

    a = ('a', 'b', 'c', 'a', 'b')
    a.index('a', 1, 3) 

    输出会报错,无法在1到2区间内找到'a'


    元组中的元素值是不允许修改的,但我们可以对元组进行连接组合:(元组建可以用+、*进行运算)
    # -*- coding: UTF-8 -*-
    
    
    tup1 = (12, 34.56);
    tup2 = ('abc', 'xyz');
    
    
    # 以下修改元组元素操作是非法的。
    # tup1[0] = 100;
    
    
    # 创建一个新的元组
    tup3 = tup1 + tup2;
    print tup3;


    元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组

    tup = ('physics', 'chemistry', 1997, 2000);
    
    
    print tup;
    del tup;
    print "After deleting tup : "
    print tup;
    

    四、字典 Dictionary


    字典是另一种可变容器模型,且可存储任意类型对象。
    字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示:
    d = {key1 : value1, key2 : value2 }


    示例代码如下:



    >>> info = {name:zhangsan,age:18}
    >>> info["name"]
    'zhangsan'
    >>> info["school"] = "hpu"
    >>> info
    {'age': 18, 'name': 'zhangsan', 'school': 'hpu'}
    >>> del info['name']
    >>> info
    {'age': 18, 'school': 'hpu'}

    在我们不确定字典中是否存在某个键而又想获取其值时,可以使用get方法,还可以设置默认值:
    age = info.get('age')


    >>> age = info.get("age") #并不知道是否有age
    >>> print(age)
    None  #age是none 
    >>> age = info.get("age",18)
    >>> age  #为age设置默认值
    18

    相关字典操作如下:


    info = {'name':'班长', 'sex':'f', 'address':'地球亚洲中国北京'}
    # print('id为:%d'%info['id'])#程序会终止运行,因为访问了不存在的键
    newId = input('请输入新的学号:')
    info['id'] = int(newId)
    print('添加之后的id为:%d'%info['id'])
    #如果在使用  变量名['键'] = 数据 时,这个“键”在字典中,不存在,那么就会新增这个元素
    
    
    # del info
    # print(info)
    info.clear() #清空字典


  • 相关阅读:
    Linux下查看使用的是哪种shell的方法汇总【转】
    Shell中的while循环【转】
    shell浅谈之三for、while、until循环【转】
    cpu_relax( )-----对自选循环等待(spin-wait loops)操作的优化【转】
    Linux makefile 教程 非常详细,且易懂【转】
    链表常见的问题【转】
    linux内核同步之信号量、顺序锁、RCU、完成量、关闭中断【转】
    linux内核同步之每CPU变量、原子操作、内存屏障、自旋锁【转】
    关于hrtimer_forward小段代码的分析【转】
    CTP多点触摸协议【转】
  • 原文地址:https://www.cnblogs.com/young-for-you/p/7286895.html
Copyright © 2011-2022 走看看