zoukankan      html  css  js  c++  java
  • 小白从零开始学编程(五)--python数据类型--字符串

    前言

    从2020年3月份开始,计划写一系列文档--《小白从零开始学编程》,记录自己从0开始学习的一些东西。

    • 第一个系列:python,计划从安装、环境搭建、基本语法、到利用Django和Flask两个当前最热的web框架完成一个小的项目
    • 第二个系列:可能会选择Go语言,也可能会选择Vue.js。具体情况待定,拭目以待吧。。。

    基本概念

    • 字符串时候Python中最常见的数据类型,通过引号间包含字符串的方式就可以创建一个字符串数据,因为python中没有字符这个数据类型,所以单引号和双引号的作用是一样的,但是要保证引号不能混用。
    • 字符串在python中是不可变类型,也即是说要改变字符串的元素需要新建一个新的字符串
    • 字符串是由独立的字符组成的,这些字符可以通过切片操作顺序的访问
    • 在Python3的字符串使用Unicode,直接支持多语言。牢记仅使用UTF-8编码

    基本操作

    字符串的创建和赋值

    创建字符串非常的简单,可以直接用引号包裹,也可以用str()工厂方法创建

    In [1]: a="hello world" # 双引号创建
    In [2]: print(a)
    hello world
    
    
    In [3]: b='hello python' # 单引号创建
    In [4]: print(b)
    hello python
    
    In [9]: s = str([1,2,3,4])  # str()方法创建
    In [10]: s 
    Out[10]: '[1, 2, 3, 4]'
    

    访问字符串的值

    用方括号加一个或者多于一个索引的方式来获得字符

    In [11]: a="hello world"
    In [12]: a
    Out[12]: 'hello world'
    In [13]: a[0]
    Out[13]: 'h'
    
    In [14]: a[1:5]
    Out[14]: 'ello'
    
    In [15]: a[6:]
    Out[15]: 'world'
    

    修改字符串

    前面说了字符串是不可修改的序列数据类型,要想修改字符串需要新创建新的变量,也就是说需要在内存中开辟新的内存空间来存储变量,新变量的名字可以和原来变量名字一样,也可以不一样

    In [16]: a="hello world"
    In [18]: a = a[:6] + 'python'  # 将world 修改为 python
    In [19]: a
    Out[19]: 'hello python'
    

    删除字符串中的字符&&删除字符串

    字符串不可改变,同样不能被删除,如果想删除其中一个字符,只能提取出字符串中需要的部分,赋值给新的字符串,
    删除整个字符串的操作可以通过给字符串赋空值或者del语句来操作,del语句会将变量在内存中删除,在大多数操作中没有必要用del语句来操作,python也有垃圾回收机制,在程序代码运行结束时,会自动释放内存

    In [20]: a
    Out[20]: 'hello python'
    In [21]: a=a[:4] + a[5:] # 删除字符
    In [22]: a
    Out[22]: 'hell python'
    
    In [25]: a=''  # 给变量赋于空字符串
    In [26]: a
    Out[26]: ''
    
    In [27]: del a  # del语句删除a变量,再想查看a的值的时候就会报错了,因为从内存中已经删除
    In [28]: a
    ---------------------------------------------------------------------------
    NameError                                 Traceback (most recent call last)
    <ipython-input-28-3f786850e387> in <module>
    ----> 1 a
    
    NameError: name 'a' is not defined
    

    字符串和操作赋

    序列操作符切片

    我们以字符串demoSring='abcd'为例子进行演示

    以下表格,
    第一行:正索引
    第二行:字符串中的各个字符
    第三行:负索引

    0 1 2 3
    a b c d
    -4 -3 -2 -1
    • 正向索引演示
    In [29]: demoSring='abcd'
    In [30]: len(demoSring) # 计算字符串的长度
    Out[30]: 4
    
    
    In [31]: demoSring[0]
    Out[31]: 'a'
    In [32]: demoSring[1]
    Out[32]: 'b'
    In [33]: demoSring[0:2] # 含头不含尾,包含第0个元素,不包含第2个元素
    Out[33]: 'ab'
    
    • 反向索引
    In [34]: -len(demoSring)
    Out[34]: -4
    
    In [35]: demoSring[-1]
    Out[35]: 'd'
    
    In [36]: demoSring[-2]
    Out[36]: 'c'
    
    In [37]: demoSring[-4:-1]
    Out[37]: 'abc'
    

    切片操作,记住一句话就是含头不含尾

    成员操作符

    成员操作符 包括 :“in”、 “not in”用来判断一个字符或者一个子串是否出现在另一个字符串中,如果出现返回True,如果不在返回False

    In [38]: 'bc' in 'abcd'
    Out[38]: True
    In [40]: 'e' in 'abcd'
    Out[40]: False
    
    In [41]: 'e' not in 'abcd'
    Out[41]: True
    

    连接符

    连接符 ‘+’,可以将多个字符串进行拼接,获取新的字符串

    In [42]: a = 'abcd'+'hello'
    In [43]: a
    Out[43]: 'abcdhello'
    

    格式化操作符

    格式化操作符 %

    In [44]: 'Hello, %s' % 'world'
    Out[44]: 'Hello, world'
    

    常见的占位符

    占位符 含义
    %d 整数
    %s 字符串
    %f 浮点数
    %x 十六进制数

    如果不确定应该用什么,就用%s,它会把任何数据类型转换为字符串

    字符串的特性

    特殊字符串

    一个反斜杠加一个单字符就可以表示一个特殊字符,通常不会打印在控制台上
    常用的特殊字符串有“ ”表示换行,“ ”表示tab键,其余还有,a,,v,f, 等一些特殊字符,可以查看官方文档

    三引号

    在上面说了单引号和双引号,python中还有一个三引号,三引号允许一个字符串跨多行,字符串中可以包含换行符、制表符、以及其他特殊字符。
    三引号常用在给类名或者函数添加注释。

    字符串不变性

    前面一直字符串不可改变,其实是字符串在同一个内存地址中不可修改,每次修改或者变更字符串时,都会开辟新的内存空间,虽然值是一样的,但是其在内存中的地址是不一样的。

    小结

    字符串是无论在哪种语言中都是极其重要的一个数据结构,其在python中的一些重要特性一定要牢牢记住、记准确。牢记仅使用UTF-8编码。

  • 相关阅读:
    BZOJ 2073: [POI2004]PRZ [DP 状压]
    POJ 2404 Jogging Trails [DP 状压 一般图最小权完美匹配]
    BZOJ 2595: [Wc2008]游览计划 [DP 状压 斯坦纳树 spfa]【学习笔记】
    BZOJ 1226: [SDOI2009]学校食堂Dining [DP 状压]
    BZOJ 2734: [HNOI2012]集合选数 [DP 状压 转化]
    BZOJ 1097: [POI2007]旅游景点atr [DP 状压 最短路]
    BZOJ 1072: [SCOI2007]排列perm [DP 状压 排列组合]
    USACO 状压DP练习[3]
    CF781D Axel and Marston in Bitland [倍增 矩阵乘法 bitset]
    Codeforces Round #403 (Div. 2, based on Technocup 2017 Finals)
  • 原文地址:https://www.cnblogs.com/codeBang/p/12539139.html
Copyright © 2011-2022 走看看