学习python3的野路子——字符串(string)、列表(list)、切片(slice)

字符串(string)

python3中变量可以不用设置变量类型,各种类型可以相互转化。可能这就是字符串使用如此灵活的一个原因。以下介绍一些基本概念,详细细节参见对应参考资料。

  • 字符串的一些基本操作[1][2]

    1. 如何表示字符串类型:使用单引号('),双引号( "),三引号('''""") 对文本进行包裹就能得到字符串。
    2. 可以用+对字符串进行拼接以及*对字符串进行复制并拼接至原字符串末尾。
    3. 与C语言中字符串相似,python的字符串也可通过索引访问单个字符。还可以通过切片操作访问某个区间内数据。
  • 字符串提供的一些字符串方法[3]

    1. len()用于返回字符串长度。

    2. split(sep=None, maxsplit=-1)需要分别传入两个参数界定字符串和最大分割次数。
      maxsplit-1表示无限次分割,否则将字符串按照界定字符串分割maxsplit次。
      关于sep不为空的时候,按照给定的sep对字符串进行分割;当待分割的字符串是空字符串时,返回的列表是['']

      对于参考资料中的例子:运行'1,,2'.split(','),得到['1', '', '2']
      可以这样理解,split函数从左到右按照sep对字符串进行分割,并将分割后得到的字符左侧放入返回列表中,之后再对字符串右边用sep进行分割。

      关于sep为空时,将按照连续的空格进行分割字符串,并且不返回空字符串。

    3. replace(old, new[, count])old为原字符串中待替换的字符串,用new表示的新的字符串做替换,并返回一个替换后的拷贝字符串。[, count][ ]的含义是可选参数。count参数是控制替换操作需要进行几次。

  • 以下是一些程序。

    # PAT中的基础编程题目集函数题7-2
    time, passtime = input().split(' ') # 将读入的字符串按空格进行分割,并赋值
    hour = int(time) // 100 # 将字符串类型转化为整型,并做整数运算
    min = int(time) % 100
    endtime = hour * 60 + min + int(passtime)
    endtime = endtime // 60 * 100 + endtime % 60
    print(endtime)
    
    # PAT中的基础编程题目集函数题7-31
    # 解题思路:只要考虑小于字符串长度的移位操作,同时考虑到移位只是将前几个连续字符接到原字符串尾
    # 因为等于字符长度的移位操作就是字符本身
    # 需要得到小于字符串长度的的移位操作,只需要取余
    # 移位操作可用切片操作完成
    
    Str = input()
    n = eval(input()) % len(Str) # 将读入字符串作为python语句运行,将运行结果用字符长度取余
    print(Str[n: ] + Str[ : n]) # 对字符串进行切片
    

列表(list)

python3中的list有较多的操作以及函数,以下简单罗列部分,更多内容参见对应参考资料[4][5]

  • 列表的一些基本操作
    1. 列表的表示:用[]包裹数据,列表中的元素用,分隔。
    2. 列表的创建:s = [ ]创建空列表,s = ['a', 'b' ]创建含有两个字符的列表。
    3. 使用innot in 判断元素是否在列表中;使用+对两个列表进行拼接;使用*对列表进行复制并拼接至原字符串末尾。
    4. 类似C++中的vector类型,列表可以通过索引访问单个元素,同时可以使用切片访问连续区域的若干元素。

      关于列表的复制
      newS = s仅仅是将newS的指向s的地址空间,因此s的改变都会影响newS
      newS = s[: ]则是将s中的所有元素放到newS指向的空间,因此s的改变并不会改变newS中的数据。
      因此,在创建多维列表[6]时,需要注意这个问题

    5. 关于遍历列表使用循环语句即可。
  • 列表的一些函数
    1. append(x)在列表之后添加一个新的元素x,保持列表中数据类型的一致,如果不同可以根据IDE提示更改为set或tuple类型。
    2. pop([i])弹出第i个元素,其中i为可选参数,未传入参数时默认为i = -1
    3. reverse()用于将列表自身反序,与s[: : -1](在文末讨论)的返回值相同。
    4. len()返回列表长度。
  • 以下是程序
      # PAT中的基础编程题目集函数题7-6
      listdata = input()
      listdata = listdata.split(' ')
      print('%c %d %.2f %.2f' %(listdata[2], int(listdata[1]), float(listdata[0]), float(listdata[3])))
      # 其中float()将其转换为浮点类型
    

关于切片(slice)

s[i:j:k][7]这种形式返回[i, j)区间内每隔k的元素组成的新列表.当iNone时为0jNone时为len(s)。其中的k不能为0
再说明一下各个字母的含义:i表示起始位置,j表示终止位置后一位,k表示间隔。
如执行s = [1, 2, 3, 4, 5, 6]print(s[0: 3: 2]),得到[1, 3]
该过程可以直观的理解为:

  • k > 0时,返回[i, j)区间内每隔k的元素组成的新列表。
  • k < 0时,
    1. i(j)为负数时,i = len(s) + i(j = len(s) + j)。
    2. iNone时为len(s) - 1jNone时为-1
    3. j+1 > i+1时,返回空列表;否则进入4。
    4. 完成上述判断之后,取原列表[j+1, i+1)区间内的元素后逆序得到新列表,之后在新列表中选取间隔-k的元素组成作为结果的列表。

关于第七份参考资料[7]以及其他[8]中的测试

s = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(s[: : -1])
print(s[5: 1: -2])
print(s[-1: -3: -1])
print(s[-3: : -1])
print(s[: -1: -1])
# 运行结果
# [9, 8, 7, 6, 5, 4, 3, 2, 1]
# [6, 4]
# [9, 8]
# [7, 6, 5, 4, 3, 2, 1]
# []

以第三个为例,

ij不是None,但为负。则令i = len(s) + (-1) = 9 - 1 = 8;同理,j = 6
取原列表中[j+1, i+1)的子列表,得到[8, 9];在做逆序操作,得到[9, 8]
按间隔k = 1组成返回的列表,即[9, 8]

参考


  1. https://www.w3cschool.cn/python3/python3-string.html

  2. https://intellipaat.com/tutorial/python-tutorial/datatypes-in-python/

  3. https://docs.python.org/3/library/stdtypes.html#text-sequence-type-str

  4. http://www.cnblogs.com/zhengyuxin/articles/1938300.html

  5. https://docs.python.org/3/library/stdtypes.html#sequence-types-list-tuple-range

  6. https://docs.python.org/3/faq/programming.html#faq-multidimensional-list

  7. https://stackoverflow.com/questions/509211/understanding-slice-notation

  8. https://bytes.com/topic/python/answers/823372-string-i-j-k

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,142评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,298评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,068评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,081评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,099评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,071评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,990评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,832评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,274评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,488评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,649评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,378评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,979评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,625评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,643评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,545评论 2 352

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,340评论 0 2
  • 写在前面的话 代码中的# > 表示的是输出结果 输入 使用input()函数 用法 注意input函数输出的均是字...
    FlyingLittlePG阅读 2,753评论 0 8
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,783评论 0 38
  • 自从大一加入交大武协后,跟学长学了一年的双节棍单棍,自己练了一年双棍,后面基本自学加四处求教。 发现喜欢双节棍的人...
    乔的简书阅读 3,856评论 1 3
  • 牙齿这个东西真的是天生有好坏的,是看基因的。从小看牙医就是我的最大噩梦。当然,牙医估计也很怕我,我的惨叫声肯定严重...
    lxy_568f阅读 404评论 0 0