小智的魔法书-python世界里的列表(三)

又是一个明媚的星期天,据天气预报说今天有雨,趁着雨还没来,栽植了紫薯、辣椒、茄子,今天3点多到5点半,弓着腰,体会了两个多小时的面朝黑土背朝天。想着今天6点要做核酸,起得太早了。趁静默期来python这个小世界修炼一会儿,等静默时间过了,再去种些土豆和黄瓜。

核酸基本上已经常态化了,频率是三天一次,离他国疫区太近了,这几天,附近的城市的感染人数有增加,也导致那些城市的静默期时间变长,估计有些人要错过农作物的种植。还是小世界里舒服,这是一片没有病毒的净土。

列表数据和字符串数据的序号规则一样,从左向右数是从0开始的正整数,从右向左数是从-1开始的负整数,可使用“盒子名称[序号]”来单独使用某元素,不同的地方是,当我们使用列表、字符串的某一元素的时候,字符串的元素不可以被赋值,而列表元素可被赋值。

>>> a='142857'
>>> a[0]
'1'
>>> a[0]='5'
TypeError: 'str' object does not support item assignment
>>> a
'142857'
>>>
>>> b=list(a)
>>> b
['1', '4', '2', '8', '5', '7']
>>> b[0]
'1'
>>> b[0]='5'
>>> b
['5', '4', '2', '8', '5', '7']
>>>

值得注意的是:上面的例子呢,当通过序号来使用内元素的时候,一定要注意区分盒子的类型,因为a[0]、b[0]写法太相似了,赋值的行为又很普遍,很容易混淆从而产生赋值错误。

如何规避混淆的产生呢,有几种方法:

第一种方法:把字符串仅当成单独一个整体使用,一定要更改字符串里某个元素时,将盛装字符串的盒子重新赋值。

>>> a='142857'
>>> a
'142857'
>>> a[0]
'1'
>>> a='542857' #盒子a重新赋值
>>> a
'542857'
>>> a[0]
'5'
>>>

盒子a重新复制后,与原来的a是不同的。

第二种方法:使用list()工具,将字符串转换成列表后再赋值,虽然不产生赋值错误,但是当使用join()工具后,产生的字符串有可能不是当初的字符串了。

>>> a='142857'
>>> b=list(a)
>>> b
['1', '4', '2', '8', '5', '7']
>>> b[0]
'1'
>>> b[0]='5'
>>> b
['5', '4', '2', '8', '5', '7']
>>> c=''.join(b)
>>> c
'542857'
>>> a == c
False
>>>

这里不能用a.split(),这种方法不能将a字符串里的元素拆成列表里的元素。

第三种:当遇到多个元素时,不确定是否有赋值行为,那么采用列表数据的格式,以保障赋值不出错误提示。

>>> a='142857'
>>> a=list(a)
>>> a
['1', '4', '2', '8', '5', '7']
>>> a[0]='9'
>>> a
['9', '4', '2', '8', '5', '7']
>>>

书写列表时,引号与用于间隔的逗号一个一个写将是很闹心的,使用字符串转换为列表的工具很方便很快捷。

第四种:使用替换工具replace(),replace()工具的括号内必须有两个内容,两个内容之间要用逗号进行间隔,replace(old,new),将现有的某元素(old)替换成另一个元素(new),这个工具还包含一个替换的次数,不写的话,是全部替换,使用格式是“字符串.replace()”,注意括号里要写两个内容。

>>> a='12123'
>>> a.replace('1','6')
'62623'
>>> a.replace('1','6',10) #带次数10
'62623'
>>> a
'12123'
>>>

这个例子中,'1'元素有两个,第一个不带次数的replace()进行了全部替换,第二个replace()工具带了次数10,10>2,也是全部替换。

>>> b=a.replace('1','6')
>>> b
'62623'
>>> a
'12123'
>>>

这个replace()工具不能将原来的字符串覆盖掉,只能在原来的基础上产生一个新的字符串,若需要保留这个新的字符串,那么需要给它一个盒子。

replace()工具除了对单个字符有用,还可以对某个连续的字符进行替换,比方对“12”进行替换。这个留着当作业吧。

replace()工具不能直接用于列表数据,

>>> b=list(a)
>>> b
['1', '2', '1', '2', '3']
>>> b.replace('1','6')
AttributeError: 'list' object has no attribute 'replace'
>>>

列表数据不能使用replace来替换内元素。

>>> b[0]='9'
>>> b
['9', '2', '1', '2', '3']
>>>

列表数据里的元素替换目前最直接的做法是赋值。

加上前篇的两个作业,现在有三个作业了。作业还蛮多哒,哈哈哈。

呀,静默期已经过了,去种土豆和黄瓜啦,下回见。

——————————-

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注