1. 程式人生 > >列表、元組、集合

列表、元組、集合

元組、隊列、集合

raw_input ##字符類型

input##數值類型

‘‘‘##格式化輸出+註釋

切片

s[2:5]##切片從2開始到5,不包括5

[[email protected] mnt]$ python

Python 2.7.5 (default, Oct 11 2015, 17:47:16)

[GCC 4.8.3 20140911 (Red Hat 4.8.3-9)] on linux2

Type "help", "copyright", "credits" or "license" for more information.

>>> s = ‘hello‘

>>> s [1:3]

‘el‘

>>> s [1:5:2]

‘el‘

>>> s [:-1]

‘hell‘

>>> s [3:]

‘lo‘

>>> s [2:3]

‘l‘

>>>

##字符串的其他操作

In [22]: s.

s.capitalize s.islower s.rpartition

s.center s.isspace s.rsplit

s.count s.istitle s.rstrip

s.decode s.isupper s.split

s.encode s.join s.splitlines

s.endswith s.ljust s.startswith

s.expandtabs s.lower s.strip

s.find s.lstrip s.swapcase

s.format s.partition s.title

s.index s.replace s.translate

s.isalnum s.rfind s.upper

s.isalpha s.rindex s.zfill

s.isdigit s.rjust

In [6]: s=‘xixi‘

In [7]: s

Out[7]: ‘xixi‘

In [9]: help(s.center)##查詢幫助

Help on built-in function center:

center(...)

S.center(width[, fillchar]) -> string

Return S centered in a string of length width. Padding is

done using the specified fill character (default is a space)

(END)

s.center##輸入數字為寬度,不夠的默認空格補齊

In [16]: s.center(6)

Out[16]: ‘ xixi ‘##默認使用空格填充

In [17]: s.center(6,‘#‘)

Out[17]: ‘#xixi#‘

s.isalnum ##包含數字和字母

In [29]: "w2".isalnum()

Out[29]: True

s.istitle ##第一個字母大寫為標題語言,返回true

In [27]: "Hello".istitle()

Out[27]: True

s.capitalize##將第一個字母轉換為大寫字母

In [26]: "hello".capitalize()

Out[26]: ‘Hello‘

s.isupper##輸入字符均為大寫為true

In [30]: "WQ".isupper()

Out[30]: True

In [31]: "Wq".isupper()

Out[31]: False

s.lower##將輸入轉換為小寫

In [32]: "Wq".lower()

Out[32]: ‘wq‘

s.upper##將輸入轉換為大寫

In [8]: s.upper()

Out[8]: ‘ SEWQF FEW‘

s.swapcase##大小寫互相轉換

In [11]: a

Out[11]: ‘svwgdSre‘

In [13]: a.swapcase()

Out[13]: ‘SVWGDsRE‘

s.islower##默認輸入為小寫

In [33]: "Wq".islower()

Out[33]: False

In [34]: "wq".islower()

Out[34]: True

s.isspace #空格

In [39]: " ".isspace()

Out[39]: True

s.isdigit #數字

In [40]: "123".isdigit()

Out[40]: True

s.isalpha #字母

import string ##導入模塊

In [35]: import string

In [36]: str

str string

In [36]: string.digits##數字

Out[36]: ‘0123456789‘

In [37]: string.letters##字母

Out[37]: ‘abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ‘

s.strip##屏蔽前後的空格

In [6]: s=" sewqf few"

In [7]: s.strip()##屏蔽前後空格,但是不能去中間的

Out[7]: ‘sewqf few‘

s.lstrip##屏蔽左邊的空格

s.rstrip##屏蔽右邊的空格

s.startswith(‘?‘)##s是以?開頭的,輸出true或false

s.endswith(‘?‘)##s是以?結尾的,輸出true或false

s.split##指定分隔符

In [15]: ip.split(‘.‘)##括號裏面指用什麽作分隔符,默認是空格

Out[15]: [‘172‘, ‘25‘, ‘254‘, ‘39‘]

In [18]: ‘swfr:def:21:dfew:///‘.split(":")

Out[18]: [‘swfr‘, ‘def‘, ‘21‘, ‘dfew‘, ‘///‘]

練習:

要求用戶輸入一個英文句子,統計該英文句子中含有單詞的數目;

提示:英文單詞間可以認為都用英文空格進行分割

測試數據:

-輸入:my name is aely

-輸出:4

#########

#!/usr/bin/env python

#coding:utf-8

__author_ = "aely"

‘‘‘

@author:aely

@file:tsetter.1.py

@contact:

@time:7/1/1711:13 AM

@desc:

‘‘‘

a = raw_input("Please input an English sentence:")##定義字符型

str1 = a.split()##用空格分隔a

print len(str1)##輸出str1的長度

##########

實驗輸出:

Please input an English sentence:my name is xiao

4

列表的定義:

# 定義一個空列表

list = []

In [24]: li

Out[24]: [‘xiaowenya‘, 3, ‘boy‘]

In [27]: "xiaowenya" in li

Out[27]: True

In [28]: "xiaopangpang" in li

Out[28]: False

In [29]: "xiaopangpang" not in li

Out[29]: True

# 定義一個包含元素的列表,元素可以是任意類型,包括數值類型,列表,字符串等均可。

列表是可變類型的序列,而元組與字符串是不可變類型的序列

# 此處定義一列表,名為list1

>>> list1 = ["fentiao", 4, "male"]

# 通過python的內置函數type查看list1的數據類型

>>> type(list1)

<type ‘list‘>##類型是列表

>>> list1[1]##查看下標為1元素的值

4

>>> list1[1] = 5##重新給這個索引賦值

>>> list1##發現列表的元素是可變的

[‘fentiao‘, 5, ‘male‘]

列表的操作:理解"對象=屬性+方法"與類

列表的索引和切片

# 列表的索引:下標是從0開始計算,比如list[0]讀取的是列表的第1個元素;

list[-1]讀取的是列表的倒數第1個元素;

>>> list1[0]

‘fentiao‘

>>> list1[-1]

‘male‘

# 列表的切片

>>> list1[:] //通過切片的方式可以實現列表的復制

[‘fentiao‘, 5, ‘male‘]

# 0代表從哪個索引開始切片,3代表切片到哪個位置,並且不包含第三個索引,2代表切片的步長;

>>> list1[0:3:2]

[‘fentiao‘, ‘male‘]

列表的添加:

>>> list1[3] = "cat"

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

IndexError: list assignment index out of range

>>> list1.append(‘cat‘)##添加元素

>>> list1

[‘fentiao‘, 5, ‘male‘, ‘cat‘]

列表的刪除:

方法一:

>>> list1.remove("cat")>>> list1

[‘fendai‘, 5, ‘male‘]

方法二:

>>> list1.remove(list1[3])

>>> list1

[‘fendai‘, 5, ‘male‘]

方法三:

>>> del(list1[3])

>>> list1

[‘fendai‘, 5, ‘male‘]

列表的修改

>>> list1

[‘fentiao‘, 5, ‘male‘, ‘cat‘]

>>> id(list1)

140205776057408

>>> list1[0] = "fendai"

>>> list1

[‘fendai‘, 5, ‘male‘, ‘cat‘]

>>> id(list1)

140205776057408

列表的重復

In [36]: li3 = li*3

In [37]: li3

Out[37]: [‘xiaowenya‘, 3, ‘boy‘, ‘xiaowenya‘, 3, ‘boy‘, ‘xiaowenya‘, 3, ‘boy‘]

列表的計算

In [30]: li1 = [1,2]+[3]

In [31]: li1

Out[31]: [1, 2, 3]

In [32]: li = [1,2]+3##只能類型相同

---------------------------------------------------------------------------

TypeError Traceback (most recent call last)

<ipython-input-32-ca053263556f> in <module>()

----> 1 li = [1,2]+3

TypeError: can only concatenate list (not "int") to list

li.append 添加 li.extend 可疊代的 li.insert 插入 li.remove 刪除 li.sort 排序

li.count 計數 li.index 索引 li.pop 彈出 li.reverse 倒敘

In [44]: li

Out[44]: [‘xiao‘, 3, ‘boy‘, ‘like‘, ‘yes‘]

In [47]: li.remove(li[1])##刪除

In [50]: li

Out[50]: [‘xiao‘, ‘boy‘, ‘like‘, ‘yes‘]

In [51]: li.pop()##彈出

Out[51]: ‘yes‘

In [52]: li

Out[52]: [‘xiao‘, ‘boy‘, ‘like‘]

In [53]: li.append(‘ni‘)##添加

In [54]: li

Out[54]: [‘xiao‘, ‘boy‘, ‘like‘, ‘ni‘]

In [55]: li.extend([‘5‘,‘wq‘])##可疊帶增加多個元素

In [56]: li

Out[56]: [‘xiao‘, ‘boy‘, ‘like‘, ‘ni‘, ‘5‘, ‘wq‘]

In [57]: li.insert(1,‘is‘)##在“1”的位置上插入is

In [58]: li

Out[58]: [‘xiao‘, ‘is‘, ‘boy‘, ‘like‘, ‘ni‘, ‘5‘, ‘wq‘]

In [63]: li.sort()##排序

In [64]: li

Out[64]: [‘5‘, ‘boy‘, ‘is‘, ‘like‘, ‘ni‘, ‘wq‘]

In [71]: li.index(‘is‘)##索引,is是li列表的第2位

Out[71]: 2

In [72]: li.count(‘is‘)##計數,查看is出現幾次

Out[72]: 1

In [74]: li.reverse()##倒序

In [75]: li

Out[75]: [‘wq‘, ‘ni‘, ‘like‘, ‘is‘, ‘boy‘, ‘5‘]

continue##跳出本輪循環

break##徹底跳出循環

元組的定義:

定義空元組

tuple = ()

定義單個值的元組

tuple = (fentiao,)##後面要加,隔開

一般的元組

tuple = (fentiao, 8, male)

為什麽需要元組?

>>> userinfo1 = "fentiao 4 male"

>>> userinfo2 = "westos 10 unknown"

>>> userinfo1[:7]

‘fentiao‘

>>> userinfo2[:6]

‘westos‘

字符串中操作提取姓名/年齡/性別的方式不方便,誕生元組與列表這兩個數據類型

>>> t1 = ("fentiao",4,"male")>>> t2 = ("westos", 10, "unknown")

>>> type(t1)

<type ‘tuple‘>

>>> type(t2)

<type ‘tuple‘>

>>> t1[0]

‘fentiao‘

>>> t2[0]

‘westos‘

>>> t2[0:2]

(‘westos‘, 10)

不能對元組的值任意更改

>>> t1

(‘fentiao‘, 4, ‘male‘)

>>> t1[1] = 5

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

TypeError: ‘tuple‘ object does not support item assignment

In [93]: t

Out[93]: (‘1‘, ‘2‘, ‘3‘, [1, 3])

In [94]: t(3)=5

File "<ipython-input-94-230a57c5feed>", line 1

t(3)=5

SyntaxError: can‘t assign to function call

In [95]: t[3][0]=5##不是絕對不能更改,元組裏面的列表可以更改

In [96]: t

Out[96]: (‘1‘, ‘2‘, ‘3‘, [5, 3])

對元組分別賦值,引申對多個變量也可通過元組方式分別賦值

>>> t1

(‘fentiao‘, 4, ‘male‘)

>>> name,age,gender=t1

>>> print name,age,gender

fentiao 4 male

>>> a,b,c=(1,2,3)

>>> print a,b,c

1 2 3

註意:C語言中,定義一類型,必須先開辟一存儲空間,當後期重新賦值時也一定是整型的;

python中,先在內存上存儲數據後,再通過標簽去引用。不同的字符串占用不同的存儲空間。

>>> str1

‘12345‘

>>> id(str1)

140205776037520

>>> str1 = "abcde"

>>> id(str1)

140205776037424

>>> str2 = "12345"

>>> id(str2)

140205776037520

元組的切片:

In [97]: t

Out[97]: (‘1‘, ‘2‘, ‘3‘, [5, 3])

In [98]: t[0:2]

Out[98]: (‘1‘, ‘2‘)

元組的添加:

In [100]: t=(1,2,3)

In [101]: type(t)

Out[101]: tuple

In [102]: t=(1,2,3)+(1,2)

In [103]: t

Out[103]: (1, 2, 3, 1, 2)

In [104]: t=(1,2,3)+1##只能添加相同類型的

---------------------------------------------------------------------------

TypeError Traceback (most recent call last)

<ipython-input-104-fbc0071c5f9b> in <module>()

----> 1 t=(1,2,3)+1

TypeError: can only concatenate tuple (not "int") to tuple

In [105]:

元組的

In [105]: t.

t.count t.index

del(t)##刪除元組t

集合:

1.集合不能為空

2.集合中不能出現列表

set的應用場景

根據前面的這些鋪墊,對於為什麽會有集合set這個數據類型有了一定的了解,那現在我們做以總結:

集合是一個無序的,不重復的數據組合。

集合可去除列表中重復的元素。集合有其他數據類型沒有的屬性,即關系測試,包含交集、差集、並集、是否為子集、是否為父集等方法。

集合的關系測試操作

#/usr/bin/env python

#coding:utf-8

定義集合的兩種方法:

1) 定義一列表,名為list_1

list_1 = [1, 2, 3, 4, 5, 1, 2, 3]

通過set方法,將數據類型從列表轉換為集合的數據類型

set_1 = set(set_1)

2) 直接定義一集合,名為set_2

set_2 = {1, 2, 45, 66, 3}

print set_1, type(list_1),type(set_1)

print set_1, set_2

‘‘‘

實現集合的關系的第一種方式:set已有方法實現

‘‘‘

# 交集

print "交集為: set_1.intersection(set_2) 或者 s1&s2

#並集

print "並集為: set_1.union(set_2) 或者 s1 | s2

list1 = [1,2,3,4,1,2,3]

s1 = set(list1)

print s1

s2 = {1,2,100,‘hello‘}

print s1.union(s2)##s2與s1的並集

print s1.intersection(s2)##s2與s1的交集

s2.intersection_update(s1)##將s1與s2求交集並更新給s2

print s1

print s2

輸出:

set([1, 2, 3, 4])

set([1, 2, 3, 4, 100, ‘hello‘])

set([1, 2])

set([1, 2, 3, 4])

set([1, 2])

#差集s1 - s2

print "set_1與set_2的差集為:set_1.difference(set_2)

print "set_2與set_1的差集為:set_2.difference(set_1)

list1 = [1,2,3,4,1,2,3]

s1 = set(list1)

print s1

s2 = {1,2,100,‘hello‘}

print s1.difference(s2)

print s2.difference(s1)

輸出:

set([1, 2, 3, 4])

set([3, 4])

set([100, ‘hello‘])

# 對等差分 s2 ^ s1(只取兩個不同的部分)

//symmetric 對稱的,與set_1.difference剛好相反

print "set_1的對等差分:%s " % set_1.symmetric_difference(set_2)

#子集

print "set_1是set_2的子集麽? %s" % set_1.issubset(set_2)#父集

print "set_2是set_1的父集麽? %s" % set_1.issuperset(set_2)

#Return True if two sets have a null intersection.

print "set_1和set_2是否沒有交集? %s" % set_1.isdisjoint(set_2)

‘‘‘

實現集合的關系的第二種方式:數學符號實現

‘‘‘

# 交集

print set_1 & set_2

#並集

print set_1 | set_2

#差集

print set_1 - set_2

print set_2 - set_1

# 對等差分

print set_1 ^ set_2

集合的增刪

#!/usr/bin/env python

#coding:utf-8

‘‘‘

實現集合的增加與刪除

‘‘‘

s = {1,2,3}

# 集合的添加

s.add(1) #在集合中添加一項

s.update([1,3,4]) #在集合中添加多項,跟的參數應該是可叠代類型

print s# 集合的刪除

s.remove(1) #刪除集合中指定的元素,如果該元素不存在,則報錯

s.discard(1) #刪除集合中指定的元素,如果該元素不存在,則不報錯

s.pop() #隨機刪除集合中的某個元素

s.clear() #清空集合的所有元素

# 集合的其他操作

print len(s) #顯示集合set的長度

print 1 in s #檢測某元素是否為集合s的成員,返回布爾值

s.copy() #集合的淺拷貝,此處不深入研究,後面會說


本文出自 “AELY木” 博客,請務必保留此出處http://12768057.blog.51cto.com/12758057/1944967

列表、元組、集合