Python基礎語法(四)—列表、元組、字典、集合、字符串

Python基礎語法(一):https://blog.zeruns.tech/index.php/archives/54/
Python基礎語法(二):https://blog.zeruns.tech/index.php/archives/112/
Python基礎語法(三):https://blog.zeruns.tech/index.php/archives/150/
Python基礎語法(四):https://blog.zeruns.tech/index.php/archives/299/

列表

基本概念

  • 列表是有序的元素集合,所有元素放在一對中括號中,用逗號隔開,沒有長度限制;
  • 列表索引值以0爲開始值,-1爲從未尾的開始位置。
  • 列表可以使用+操作符進行拼接,使用*表示重複。
  • 當列表元素增加或刪除時,列表對象自動進行擴展或收縮內存,保證元素之間沒有縫隙;
  • 列表中的元素可以是不同類型的

列表的使用方式

list = ["zeruns","blog","blog.zeruns.tech",9527,[0,1,2,[1,2]]]#創建一個列表,一個列表裏可以有多種數據類型,甚至可以嵌套列表來做二或三維列表
#          0       1           2             3       4
#         -5      -4          -3            -2      -1
print(list[0])
print(list[2])
print(list[4][2])
print(list[4][3][0])
print(list[-1])
print(list[-2])
'''
結果:
zeruns
blog.zeruns.tech
2
1
[0, 1, 2, [1, 2]]
9527
'''

列表的基本操作

列表操作符 操作符含義
< list1 > + < list2 > 連接兩個列表
< list > * < 整數類型 > 對列表進行整數次重複
< list >[< 整數類型 >] 索引列表中的元素
len( < seq > ) 獲取列表中元素個數
for < var > in < list > : 對列表進行循環列舉
< list >[< 整數類型 > : < 整數類型 >] 取列表的一個子序列
< expr > in < list > 成員檢查,判斷< expr >是否在列表中

列表的相關方法

方法 方法含義
< list >.append( x ) 將元素x增加到列表的最後
< list >.sort( ) 將列表元素排序,默認爲升序
< list >.reverse( ) 將列表元素反轉
< list >.index( ) 返回第一次出現元素x的索引值
< list >.insert( i, x ) 在位置i處插入新元素x
< list >.count( x ) 返回元素x在列表中的數量
< list >.remove( x ) 刪除列表中第一次出現的元素x
< list >.pop( i ) 取出列表中位置i的元素,並刪除它
>>> a = [2,0,9,1,5]
>>> b = ['c','w','b','a']
>>> a.append(9)
>>> a
[2, 0, 9, 1, 5, 9]
>>> a.sort()
>>> a
[0, 1, 2, 5, 9, 9]
>>> a.reverse()
>>> a
[9, 9, 5, 2, 1, 0]
>>> b.sort()
>>> b
['a', 'b', 'c', 'w']
>>> a.index(5)
2
>>> a.insert(2,7)
>>> a
[9, 9, 7, 5, 2, 1, 0]
>>> a.count(9)
2
>>> a.remove(9)
>>> a
[9, 7, 5, 2, 1, 0]
>>> a.pop(0)
9
>>> a
[7, 5, 2, 1, 0]

列表推導式

  • 列表推導式(又稱列表解析式)提供了一種簡明扼要的方法來創建列表。
  • 它的結構是在一箇中括號裏包含一個表達式,然後是一個for語句,然後是 0 個或多個 for 或者 if 語句。那個表達式可以是任意的,意思是你可以在列表中放入任意類型的對象。返回結果將是一個新的列表,在這個以 if 和 for 語句爲上下文的表達式運行完成之後產生。
  • 列表推導式的執行順序:各語句之間是嵌套關係,左邊第二個語句是最外層,依次往右進一層,左邊第一條語句是最後一層。
data = [i for i in range(10)]
#等價於
data = []
for i in range(10):
    data.append(i)
'--------------分割線---------------'
data = [2**i for i in range(10)]
#等價於
data = []
for i in range(10):
    data.append(2**i)
'--------------分割線---------------'
data = [num for num in range(20) if num%2==1]
#等價於
data = []
for num in range(20):
    if num%2==1:
        data.append(num)

應用

一個學校,有3個辦公室,現在有8位老師等待工位的分配,請編寫程序,完成隨機的分配

答案:

#encoding=utf-8

import random

# 定義一個列表用來保存3個辦公室
offices = [[],[],[]]

# 定義一個列表用來存儲8位老師的名字
names = ['A','B','C','D','E','F','G','H']

i = 0
for name in names:
    index = random.randint(0,2)    
    offices[index].append(name)

i = 1
for tempNames in offices:
    print('辦公室%d的人數爲:%d'%(i,len(tempNames)))
    i+=1
    for name in tempNames:
        print("%s"%name,end='')
    print("\n")
    print("-"*20)

運行結果如下:

元組

基本概念

  • 元組(tuple)是包含多個元素的類型,元素之間用逗號分割
    如:t1 =(123,456,“hello”)
  • 可以通過把若干元素放在一對圓括號中創建元組,如果只有一個元素的話則需要多加一個逗號,例如(3,)。
  • 也可以使用tuple()函數把列表、字典、集合、字符串以及range對象、map對象、zip對象或其他類似對象轉換爲元組。
  • 元組可以是空的,t2=()
  • 一個元組也可以作爲另一個元組的元素,此時,作爲元素的元組需要增加括號,從而避免歧義,如:t3=(123,456,(“hello”,“world”))
  • Python 的元組與列表類似,不同之處在於元組的元素不能修改。

元組的使用

>>> a = ('hello',2020,110)
>>> a
('hello', 2020, 110)
>>> a[1]
2020

元組中的元素值是不允許修改和刪除的,但我們可以使用del語句來刪除整個元組

>>> a = ('hello',2020,'blog.zeruns.tech')
>>> print(a)
('hello', 2020, 'blog.zeruns.tech')
>>> del a
>>> print(a)
Traceback (most recent call last):
  File "<pyshell#24>", line 1, in <module>
    print(a)
NameError: name 'a' is not defined

所謂元組的不可變指的是元組所指向的內存中的內容不可變。

>>> tup = ('r', 'u', 'n', 'o', 'o', 'b')
>>> tup[0] = 'g'     # 不支持修改元素
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> id(tup)     # 查看內存地址
4440687904
>>> tup = (1,2,3)
>>> id(tup)
4441088800    # 內存地址不一樣了

字典

基本概念

  • 字典是無序的對象集合,使用鍵-值(key-value) 存儲,具有極快的查找速度。
  • 鍵(key)必須使用不可變類型
  • 同一個字典中,鍵(key)必須是唯一
  • 字典的每個鍵值key= >value對用冒號:分割,每個鍵值對之間用逗號,分割,整個字典包括在花括號}中,格式如下所示:
  • dic = {key1 : value1, key2 : value2 }
  • 字典鍵一般是唯的,如果重複最後的一一個鍵值對會替換前面的,值不需要唯一。
  • 鍵必須不可變,所以可以用數字,字符串或元組充當,而用列表就不行
>>> hhh = {'website':'blog.zeruns.tech','name':'zeruns'}
>>> hhh['website']
'blog.zeruns.tech'

常用方法

方法 描述
keys() 返回字典中鍵的列表
values() 返回字典中值的列表
items() 返回tuples的列表。每個tuple由字典的鍵和相應值組成
clear() 刪除字典的所有條目
copy() 返回字典高層結構的一個拷貝,但不復制嵌入結構,而只複製對那些結構的引用
update(x) 用字典x中的鍵值對更新字典內容。
get(x[,y])) 返回鍵x,若未找到該鍵返回none,若提供y,則未找回時返回y
str(x) 以字符串形式輸出字典x
len(x) 返回字典x的元素個數,即鍵的總數。
>>> hhh = {'website':'blog.zeruns.tech','name':'zeruns'}
>>> hhh.keys()
dict_keys(['website', 'name'])
>>> hhh.values()
dict_values(['blog.zeruns.tech', 'zeruns'])
>>> hhh.items()
dict_items([('website', 'blog.zeruns.tech'), ('name', 'zeruns')])
>>> hhh.copy()
{'website': 'blog.zeruns.tech', 'name': 'zeruns'}
>>> awsl = {'website':'https://blog.zeruns.tech'}
>>> hhh.update(awsl)
>>> hhh
{'website': 'https://blog.zeruns.tech', 'name': 'zeruns'}
>>> hhh.get('website')
'https://blog.zeruns.tech'
>>> hhh.get('hhh','666')
'666'
>>> hhh.clear()
>>> hhh
{}
>>> dict = {'Name': 'zeruns', 'Age': 7, 'Class': 'First'}
>>> str(dict)
"{'Name': 'zeruns', 'Class': 'First', 'Age': 7}"

字典元素修改、添加與刪除

  • 可以使用字典對象的pop()刪除指定“鍵”對應的元素,同時返回對應的“值"
  • popitem()方法用於刪除字典的一個鍵對,並返回一個包含兩個元素的元組,其中的兩個元素分別是字典元素的“鍵”和“值" .
  • 也可以使用del刪除指定的“鍵”對應的元素。

集合

概述

  • Python集合是無序、可變的容器對象,所有元素放在一對大括號中,元素之間使用逗號分隔,同一個集合內的每個元素都是唯一的, 不允許重複,
  • 集合中只能包含數字、字符串、元組等不可變類型的數據,而不能包含列表.字典、集合等可變類型的數據,包含列表等可變類型數據的元組也不能作爲集合的元素。
  • 集合中的元素是無序的,元素存儲順序和添加順序並不一致。
  • 集合不支持使用下標直接訪問特定位置上的元素,也不支持使用random中的choice()函數從集合中隨機選取元素,但支持使用random模塊中的sample()函數隨機選取部分元素。

set(集合)

  • set和dict類似, 也是一組key的集合,但不存儲value。由於key不能重複,所以,在set中,沒有重複的key。
  • set是無序的,重複元素在set中自動被過濾。
  • 可以使用大括號{ }或者set()函數創建集合,注意:創建一個空集合必須用set()而不是{ },因爲{ }是用來創建一個空字典。
  • set可以看成數學意義上的無序和無重複元素的集合,因此,兩個set可以做數學意義上的交集(&)、井集(|)、差集(-)等操作。

集合的常用方法

  • s = add(x):將元素x添加到集合s中,如果元素已存在,則不進行任何操作。
  • s = update(x):將x的元素添加到集合s中,x可以是列表,元組,字典等。
  • s.pop(x):隨機刪除集合中的一個元素。
  • s.remove(x):將元素x從集合s中移除,如果元素不存在,則會發生錯誤。
  • s.discard(x):將元素x從集合s中移除,如果元素不存在,不會發生錯誤
  • len(s):計算集合 s 元素個數。
  • s.clear():清空集合 s。

字符串

概述

  • 字符串(str)是用雙引號""或者單引號’'括起來的一個或多個字符
  • 字符串可以保存在變量中,也可以單獨存在
  • 字符串屬於不可變對象,所有方法都是返回處理後的字符串或字節串,不對原字符串進行任何修改。

字符串操作

  • 字符串之間可以通過**+或***進行連接
    • 加法操作(+)將兩個字符串連接成爲一個新的字符串
    • 乘法操作(*)生成一個由其本身字符串重複連接而成的字符串
    • x in s:如果x是s的子串,返回True,否則返回False
    • str[N:M]:切片, 返回子串
  • len()函數能返回-一個字符串的長度
    • str1=“hello,world”
    • len(str1)
  • 大多數數據類型都可以通過str()函數轉換爲字符串:如str(123)
  • type()函數測試一個字符串的類型

字符串操作

操作 含義
+ 連接
* 重複
< string >[ ] 索引
< string >[ : ] 剪切
len(< string >) 長度
< string >.upper() 字符串中字母大寫
< string >.lower() 字符串中字母小寫
< string >.strip() 去兩邊空格及指定字符
< string >.split() 按指定字符分隔字符串爲數組
< string >.join() 連接兩個字符串序列
< string >.find() 搜索指定字符串
< string >.replace() 字符串替換
for < var > in < string > 字符串迭代

常用方法

  • index(x)、rindex(x): 檢測x是否包含在字符串中,返回相應的索引值,如果不存在。返回異常。
  • count(x):返回x在string裏面出現的次數。
  • replace(str1,str2[,max]):把將字符串中的str1替換成str2,如果max指定,則替換不超過max次。
  • maketrans():創建字符映射的轉換表。
  • translate(str):根據str給出的映射轉換錶轉換string字符。
  • ljust(width[,fllchar]): 返回一個原字符串左對齊,並使用fillchar填充至長度width的新字符串,fillchar默認爲空格。rjust()、center()類似。
  • split(str="",num=string.count(str)),其中num=string.count(str))以str爲分隔符截取字符串,如果num有指定值,則僅截取num+1個子字符串。rsplit()類似,從右側開始截取。
  • join(seq): 以指定字符串作爲分隔符,將seq中所有的元素(的字符串表示)合併爲一個新的字符串。
  • startswith(substr)、endswith(substr):檢查字符串是否是以指定子字符串substr開頭或結束,是則返回True。
  • strip()、rstrip()、lstrip(): 截取字符串的指定字符。

字符串格式化

python字符串格式化符號:

符 號 描述
%c 格式化字符及其ASCII碼
%s 格式化字符串
%d 格式化整數
%u 格式化無符號整型
%o 格式化無符號八進制數
%x 格式化無符號十六進制數
%X 格式化無符號十六進制數(大寫)
%f 格式化浮點數字,可指定小數點後的精度
%e 用科學計數法格式化浮點數
%E 作用同%e,用科學計數法格式化浮點數
%g 浮點型數據 會去掉多餘的零 至多保留6位
%G 浮點型數據 會去掉多餘的零 至多保留6位
%p 用十六進制數格式化變量的地址

格式化操作符輔助指令:

符號 描述
* 定義寬度或者小數點精度
- 用做左對齊
+ 在正數前面顯示加號( + )
< sp > 在正數前面顯示空格
# 在八進制數前面顯示零(‘0’),在十六進制前面顯示’0x’或者’0X’(取決於用的是’x’還是’X’)
0 顯示的數字前面填充’0’而不是默認的空格
% ‘%%‘輸出一個單一的’%’
(var) 映射變量(字典參數)
m.n. m 是顯示的最小總寬度,n 是小數點後的位數(如果可用的話)

應用

編寫程序,完成以下要求:
統計字符串中,各個字符的個數
比如:“hello world” 字符串統計的結果爲: h:1 e:1 l:3 o:2 d:1 r:1 w:1

答案:https://gitee.com/zeruns/Python-programming-exercises/blob/master/%E5%9F%BA%E7%A1%80/%E7%BB%9F%E8%AE%A1%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%AD%E5%90%84%E5%AD%97%E7%AC%A6%E4%B8%AA%E6%95%B0.py

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