Python基礎-----列表、元組、集合(2)

raw_input ##字符類型

input##數值類型

 

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

 

切片

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

[kiosk@foundation39 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()          #集合的淺拷貝,此處不深入研究,後面會說


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章