Python学习之比较列表和字符串

19 篇文章 0 订阅
17 篇文章 1 订阅

列表和字符串这两种对象类型有很多类似的地方,也有很大的区别,有必要对他们做个比较。哈哈,我在说废话!
相同点
两者都属于序列类型。因此,对属于序列的操作都适合两者。
上一篇文章中,我提到对于序列的访问都可以通过一个编号的方式得到,或者说是索引值吧!而想一次得打多个元素,可以使用切片。索引值从0开始,到总元素数减一结束。对于其基本操作,我在这里再操作一下。

>>> string = "This is a string"
>>> print string
This is a string
>>> string[0]
'T'
>>> string[2]
'i'
>>> string[:1]
'T'
>>> string[:]
'This is a string'
>>> string[1:]
'his is a string'
>>> string[:-1]
'This is a strin'
>>> string [3:6]
's i'
>>> string [-3:-6]
''
>>> string [-6:-3]
'str'
>>> 

以上是对关于字符串的基本操作,其他关于字符串的操作,在此再不一一赘述。
关于列表的操作。

>>> arraylist = ["java",1,"C++","Objective-C",3,"Python",5]
>>> arrlist = ["I","Love","Python"]
>>> print arraylist
['java', 1, 'C++', 'Objective-C', 3, 'Python', 5]
>>> print arrlist
['I', 'Love', 'Python']
>>> arraylist[1]
1
>>> arraylist[:2]
['java', 1]
>>> arraylist[:]
['java', 1, 'C++', 'Objective-C', 3, 'Python', 5]
>>> arraylist[:-1]
['java', 1, 'C++', 'Objective-C', 3, 'Python']
>>> arraylist[::-1]
[5, 'Python', 3, 'Objective-C', 'C++', 1, 'java']
>>> arraylist[-6:-3]
[1, 'C++', 'Objective-C']
>>> arraylist[3:6]
['Objective-C', 3, 'Python']
>>> print arraylist+arrlist
['java', 1, 'C++', 'Objective-C', 3, 'Python', 5, 'I', 'Love', 'Python']
>>> 

关于序列的其他基本操作,我不在一一赘述了。
区别
列表和字符串最大的区别就是:列表可以改变,字符串不可以改变。
首先我们来看看对于列表的操作。其特点是:在原处对列表进行修改。

>>> print arraylist
['java', 1, 'C++', 'Objective-C', 3, 'Python', 5]
>>> arraylist.append("VC++")
>>> print arraylist
['java', 1, 'C++', 'Objective-C', 3, 'Python', 5, 'VC++']
>>> arraylist[1]
1
>>> arraylist[1]='yi'
>>> print arraylist
['java', 'yi', 'C++', 'Objective-C', 3, 'Python', 5, 'VC++']
>>> arraylist.insert(1,"Lenovo")
>>> print arraylist
['java', 'Lenovo', 'yi', 'C++', 'Objective-C', 3, 'Python', 5, 'VC++']
>>> arraylist.pop()
'VC++'
>>> del arraylist[1]
>>> print arraylist
['java', 'yi', 'C++', 'Objective-C', 3, 'Python', 5]
>>> 

思考,如果以上的操作用在字符串的操作上,那么会发生什么鬼呢??
示例演练在字符串中操作

>>> print string
This is a string
>>> string[1]
'h'
>>> string[1]='T'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment #str对象类型不支持指定的任务
>>> string.append("char")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'append'  #str对象类型没有追加属性。
>>> del string[1]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object doesn't support item deletion
>>> string.insert(1,"T")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'insert'
>>> 

思考:那么怎么修改一个str对象呢??

答案是:重新生成一个新的str对象。如何生成?请看下面。

>>> string = "python"
>>> print string
python
>>> string.replace('p','P')
'Python'
>>> print string            #原字符串对象不变。
python
>>> 

我们可以看到,这儿使用了replace( )函数。关于此函数,我们以后继续会涉及到的。
那么有没有其他的方法呢?
答案是有,下面就是将字符串转换为列表。别着急,后面会学习列表和字符串的相会转换。

>>> string
'python'
>>> newString = list(string)
>>> newString[0] = 'P'
>>> ''.join(newString)
'Python'
>>> 

我们可以看出将字符串转换成列表后修改值,然后用join组成新字符串。
也可以用切片的方法进行修改。

>>> print string
python
>>> string[:0]+'P'+string[1:] 
'Python'
>>> 

不过这个得自己思考哦!自己思考的,才是最后能记住的。
接下来我们学习一下多维列表,类似于java和类C语言的多维数组

>>> multlist = [[1,2,3],[4,5,6],["Python","Java","C++"]]
>>> print multlist
[[1, 2, 3], [4, 5, 6], ['Python', 'Java', 'C++']]
>>> multlist[1][1]
5
>>> multlist[2][1]
'Java'
>>> 

很简单吧。哈哈。
来,到了神奇的一节了。
列表和字符串的相互转换
在学习列表和字符串之间的转换的时候,我们需要涉及到两个基本的函数。split( )函数和join( )函数
str.split( )函数
Help on method_descriptor:

split(…)
S.split([sep [,maxsplit]]) -> list of strings

Return a list of the words in the string S, using sep as the
delimiter string.  If maxsplit is given, at most maxsplit
splits are done. If sep is not specified or is None, any
whitespace string is a separator and empty strings are removed
from the result.

(END)
意思大概是使用seq做为分隔符,从字符串S中返回一个单词列表。如果给定了maxsplit,最多有maxsplit被分割完成,如果没有指定seq或者是空的,结果中有任何空白的字符串将是一个分隔符并且任何的空字符串将会被移除。
突然感觉英语没有学习好,翻译起来比较晦涩难懂,不过可以了,感觉比谷歌机器人翻译的好多了,谷歌翻译翻译出来的,我根本看不懂,或许我翻译的你也看不懂,但是没有关系,我们有示例,通过示例可以看出来。

>>> string = "Hello.I .am . a. dog"
>>> string.split(".")
['Hello', 'I ', 'am ', ' a', ' dog']
>>> string.split(".",3)
['Hello', 'I ', 'am ', ' a. dog']
>>> string.split(".",2)
['Hello', 'I ', 'am . a. dog']
>>> 

上面示例中2,3就是官方文档中给定的Maxsplit。最大分割几个的意思。如果超过,到最后一个分隔符自动终止。
还可以用空格作为分隔符。像下面这样。

>>> string = " Hello I am a dog"
>>> print string
 Hello I am a dog
>>> string.split(" ")
['', 'Hello', 'I', 'am', 'a', 'dog']
>>> 

再看一个神奇的分割,会觉得这个split()函数很强大。

>>> string = "Hello,I\n am\t a\n dog"
>>> print string
Hello,I
 am  a
 dog
>>> string.split()
['Hello,I', 'am', 'a', 'dog']
>>> 

看到了吗,字符串中包含\n \t ,好几个分隔符。但是只要split( )无参,那么每个遇到的符号都会被当做分隔符的。
join()函数
join()函数,说过来其实是split( )函数的逆运算。之前我们提到过逆运算的是谁??是不是忘了,我就知道你忘了,是reversed( )和[ ::-1 ]。

>>> string = " Hello I am hungry"
>>> " ".join(string)
'  H e l l o   I   a m   h u n g r y'
>>> ".".join(string)
' .H.e.l.l.o. .I. .a.m. .h.u.n.g.r.y'
>>> "".join(string)
' Hello I am hungry'
>>> 

再来看看那个神奇的例子。

>>> string = " Hello, I\n am\t hun\ngry"
>>> print string
 Hello, I
 am  hun
gry
>>> string.split()
['Hello,', 'I', 'am', 'hun', 'gry']
>>> " ".join(string)
'  H e l l o ,   I \n   a m \t   h u n \n g r y'
>>> "".join(string)
' Hello, I\n am\t hun\ngry'
>>> "".join(string.split())
'Hello,Iamhungry'
>>> " ".join(string.split())
'Hello, I am hun gry'
>>> 

好了,以上就是今天要学习的Python关于列表和字符串的比较方面的知识。明天更新元组

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中,可以使用切片(slice)来截取字符串。切片是指从一个字符串中获取指定范围的子字符串。切片的语法是通过使用方括号[]来指定起始位置和结束位置的索引。 下面是一些常见的字符串截取操作: 1. 截取单个字符: 可以通过指定字符的索引来截取单个字符。索引从0开始,负数索引表示从字符串末尾开始计数。 示例代码: ```python string = "Hello, World!" char = string # 获取第一个字符 print(char) # 输出:H ``` 2. 截取子字符串: 可以通过指定起始位置和结束位置的索引来截取子字符串。截取的范围是左闭右开区间,即包含起始位置的字符,但不包含结束位置的字符。 示例代码: ```python string = "Hello, World!" substring = string[7:12] # 获取从索引7到索引11的子字符串 print(substring) # 输出:World ``` 3. 省略起始位置或结束位置: 如果省略起始位置,则默认从字符串的开头开始截取;如果省略结束位置,则默认截取到字符串的末尾。 示例代码: ```python string = "Hello, World!" substring1 = string[:5] # 获取从开头到索引4的子字符串 substring2 = string[7:] # 获取从索引7到末尾的子字符串 print(substring1) # 输出:Hello print(substring2) # 输出:World! ``` 4. 使用负数索引: 可以使用负数索引来从字符串末尾开始计数。例如,-1表示最后一个字符,-2表示倒数第二个字符,依此类推。 示例代码: ```python string = "Hello, World!" substring = string[-6:-1] # 获取从倒数第6个字符到倒数第2个字符的子字符串 print(substring) # 输出:World ``` 希望以上内容对你有所帮助!如果还有其他问题,请继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值