參考鏈接: Python | 重點數據類型 (字符串,列表,元組,迭代)(String, List, Tuple, Iteration)
序列是Python中最基本的數據結構(一些基本特性類似于C++中的數組模板類),序列中的每一個元素都有相應的位置序號,從0開始。列表和元組屬于序列,因此用于通用序列的操作都可以應用于它們,同時它們也有各自獨特的方法。
?
通用序列操作?
?
所有的序列類型都可以進行某些特定的操作,例如索引(indexing)、分片(slicing)、加(adding)、乘(multiplying)、迭代(iteration)、成員資格檢查等。
?
索引(indexing)?
?
序列中的所有元素都有對應的位置序號——從0開始遞增。我們通過其對應序號訪問某一個或某些元素的過程就是索引的過程。除了整數索引外,Python還提供了負數索引以更方便地訪問序列元素。使用負數索引時,Python會從序列的右邊,也就是最后一個元素開始計數,-1代表最后一個元素,-2代表倒數第二個元素,依此類推(沒有-0)。 序列字面值能夠直接使用索引,而不需要通過變量來訪問。??
如果一個函數調用返回一個序列,那么可以直接對返回結果(也就是序列)進行索引操作。?
?
#!/usr/bin/env python
str1 = "Hello World!"
print str1[0]
print str1[-1]
?
print "Hello World!"[0]
?
str2 = raw_input("Please enter a string: ")[2]
print str2
?
?
?
??
分片(slicing)?
?
分片操作可以用來訪問序列中一定范圍內的元素。分片操作通過一個冒號隔開的兩個索引來實現,此時將訪問包括第一個索引序號,不包括第二個索引序號的范圍內的序列元素,也即左閉右開的半開區間。 Python的索引操作支持負數索引,因此也可以用負數索引方便地訪問序列中排在末尾部分的元素。需要注意的是,由于分片的索引范圍是左閉右開區間,因此如果需要訪問最后一個元素時,需要置空第二個索引。同樣如果要從第一個元素開始訪問,也可以置空第一個索引(與0效果相同)。 在分片的時候,我們還可以設置第三個參數——步長,來滿足我們的一些特殊需求。默認情況下步長參數的值為1,我們可以顯式地設置它。??
步長參數甚至支持負數,如果步長為負數,分片操作將會從右往左提取序列元素,使用負數步長時第一個索引序號必須大于第二個索引序號,否則分片結果會為空。對于負數步長,分片操作依然按照左閉右開區間來提取序列元素。?
?
?
#!/usr/bin/env python
str = "Hello, world!"
print str[0:3]
num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print num[1:6]
print num[-3:-1]
print num[-3:]
print num[:3]
print num[:]
print num[0:8:2]
print num[8:0:-2]
?
?
?
?
加(adding)?
序列相加的操作很簡單,可以將序列連接在一起,但加操作只能應用于相同類型的序列,例如列表和字符串是不能連接在一起的。?
?
#!/usr/bin/env python
str1 = "Hello, "
str2 = "world"
print str1+str2
num1 = [1, 2, 3]
num2 = [4, 5, 6]
print num1+num2
?
?
?
?
?
?
乘(multiplying)?
?
序列的乘操作是一個序列乘一個數字n(正整數),其結果會生成一個新的序列,這個新序列內的元素為原來的序列被重復n次。??
利用序列的乘操作可以初始化列表。Python中有一個內建值None,與C中的NULL和C++中的nullptr一樣,代表空值。因此可以利用空值None結合乘操作來創建或者初始化序列。?
?
str = "Hello"
print str*3
init = [None]*10
print init
?
?
? ?
成員資格檢查?
這個操作可以檢查一個值是否在序列中,用in運算符實現,該運算符返回一個布爾值。?
?
str = "This is a string."
print 'i' in str
print 'o' in str
?
?
?
?
長度、最小值和最大值?
內建函數len、min和max分別返回序列的元素數量、最小值、最大值。?
?
num = [8, 24, 33, 135, 1024]
print len(num)
print min(num), max(num)
?
?
?
?
列表(List)?
列表是一種可變的序列,可以改變列表的內容。列表的定義方式在通用序列操作中已經出現了很多次:使用中括號[]將列表括起來,列表元素之間用逗號“,”隔開。除此之外,Python還提供了一個非常好用的內建函數list來將各種類型的序列轉化為列表。?
?
demo_of_list1 = [1, 2, 3]
print demo_of_list1
demo_of_list2 = list("Hello, world")
print demo_of_list2
?
?
?
?
列表操作?
1.元素賦值??
結合索引和賦值語句,可以很簡單地對列表元素進行賦值(列表元素必須存在)。?
?
#!/usr/bin/env python
tmp = [None]*10
print tmp
tmp[2] = 24
print tmp
?
?
?
?
2.元素刪除??
使用del語句就可以刪除元素。?
?
#!/usr/bin/env python
tmp = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print tmp
del tmp[0]
print tmp
del tmp[0:8]
print tmp
?
?
?
?
3.分片賦值??
結合分片操作可以對列表中的多個元素進行賦值,甚至變相達到插入、刪除元素的目的。?
?
#!/usr/bin/env python
#coding:utf-8
num = [ 1, 2, 3, 4, 5, 6]
print num
num[0:2] = [24, 33]
print num
num[:2] = [0, 1, 2] #替換元素長度可以與被替換部分不同
print num
num[3:3] = [33, 24, 794]
print num
num[:6] = []
print num
?
?
?
列表方法?
1.append append用于在列表末尾追加新的對象,append方法直接修改原列表,無返回值,且一次方法調用只能追加一個對象。?
?
?
#!/usr/bin/env python
#coding:utf-8
?
num = [1, 2, 3]
print num
num.append(4)
print num
num.append([5, 6]) #對append方法而言,這是一個元素而不是兩個元素(也即一個對象)
print num
?
?
?
2.count count方法統計某個元素在列表中出現的次數,返回值為統計次數。?
?
?
#!/usr/bin/env python
#coding:utf-8
?
str =list("This is a string")
print str.count("t")
print str.count("i")
print " "
num = [1, 2, 2, 3, 4, 5, 6, 6, 6]
print num.count(2)
print num.count(6)
?
?
?
3.extend extend方法可以用一個列表去擴展原有的列表,與連接操作(“+”)不同的是,extend方法修改了被擴展的序列且沒有返回值,而連接操作會返回一個新列表。用分片賦值操作也可以實現相同的結果。?
?
?
#!/usr/bin/env python
#coding:utf-8
?
num1 = [1, 2, 3]
num2 = [4, 5]
print num1
print num2
num1.extend(num2) #對象為被擴展序列,方法接受的參數為擴展序列
print num1
print num2
?
?
?
4.index index方法用于從列表中找出指定值的第一個匹配項的位置并返回其索引值。?
?
?
#!/usr/bin/env python
#coding:utf-8
?
tmp = list("Hello")
print tmp
print tmp.index("l")
?
?
?
5.insert insert方法將一個對象插入到列表中,該方法接受的第一個參數為插入位置(索引),第二個參數為對象。insert方法一次只能插入一個元素。?
?
?
#!/usr/bin/env python
#coding:utf-8
?
num1 = [1, 2, 3]
num2 = [4, 5]
print num1
print num2
num1.insert(1, num2)
print num1
num2.insert(0, 33)
print num2
?
?
6.pop pop方法用于移除列表中的一個元素(默認是最后一個,也可以指定刪除某一元素),并且返回該元素的值。使用pop方法和append方法可以實現棧操作,而隊列操作可以用pop方法和insert方法來完成。?
?
#!/usr/bin/env python
#coding:utf-8
?
num = [1, 2, 3, 4, 5]
print num
print num.pop()
print num
print num.pop(1) #指定刪除
print num
?
?
?
7.remove remove方法用于移除列表中指定值的第一個匹配項,remove方法沒有返回值。?
?
?
#!/usr/bin/env python
#coding:utf-8
?
tmp = list("Hello")
print tmp
tmp.remove("l")
print tmp
?
?
?
8.reverse reverse方法將列表倒序存放(直接修改列表),沒有返回值。?
?
?
#!/usr/bin/env python
#coding:utf-8
?
num = [1, 2, 3, 4, 5, 6]
print num
num.reverse()
print num
?
?
?
9.sort sort方法用于對列表進行排序(直接修改原列表),如果想要保留原列表就需要自行創建副本。sort方法的排序算法是固定的,而且默認升序。?
?
?
#!/usr/bin/env python
#coding:utf-8
?
num1 = [33, 8, 24, 1, 5, 0, 9]
num2 = [101, 24, 135, 6, 1024]
print "num1: ", num1
num1.sort()
print "排序后:", num1
tmp = num2 #自行創建副本
tmp.sort()
print "num2: ", num2
print "tmp: ", tmp
?
?
?
如果希望元素能夠按照特定方式排序,那么可以通過compare(x, y)的形式自定義比較函數。此外,sort方法還有另外兩個可選參數key和reverse。關于sort方法的高級應用寫在另一篇博文中。
?
元組(Tuple)?
元組也是序列的一種,但與列表不同的是,元組不能修改(元組與列表在技術實現上不同)。元組由圓括號括起元組元素,元素之間用逗號分隔。還可以用tuple函數將一個序列轉化為元組。?
?
#!/usr/bin/env python
#coding:utf-8
?
tmp1 = (1, 2, 3)
print tmp1
tmp2 = tuple("python")
print tmp2