python 歷險記(一)— python 的String,集合(List,元組,Dict)

引言

想學爬蟲仍是 python 專業啊,以前一直在用 java, 如今決定嚐嚐鮮,使用 python及爬蟲框架來完成網絡數據採集。
編程語言之間都是相通的,好比都須要模塊化,引入其餘文件來實現功能,使用列表等容器來處理數據,都要使用 jsonxml 來解析和傳輸數據。
你會發現經過 類比 的方式,帶着問題去學習,你會發現走的很快
並且我認爲代碼示例的做用是 異常強大的, 我會盡可能使用代碼示例的方式來展現,以知足同窗快速學習的須要,也備後續查詢。java

下面就是在 使用 python 過程當中的問題總結,okay,讓咱們一塊兒來歷險吧~python

String 有哪些有用的方法?

不論是哪一種語言,用的最多的類型估計都是 string (字符串),要想快速入門 python, 掌握 string 也是必須的。算法

在 java 中使用最多的 string 功能,我也會帶着一樣的疑問來了解 python 該使用什麼方法實現。若是這裏沒有你要找的方法,能夠到 python string 官方地址完整方法去查詢編程

如何拼接字符串?

  • 使用 + 號來拼接,要注意的是,當有數字的時候必定要轉化爲字符串格式 str(value) 纔可以相加,否則會報錯。
  • 使用%進行拼接,和佔位符的概念比較相似,這裏舉個栗子
hour = 9
minutes = 45
print('it\'s %d:%d minutes!' %(hour, minutes))

如何分隔字符串?

# 對字符串分割
split_str = 'a-b-c-d'
print(split_str.split('-'))

如何獲取字符串長度

# 獲取字符串的長度
print(len('banana'))

如何將 list 拼接成字符串?

# 以 - 作間隔,拼接字符串
join_str_list = ['a', 'b', 'c', 'd']
print('-'.join(join_str_list)) # 這裏就是用 - 拼接後的值

如何替換字符串?

str.replace(old, new[, count])

count 表示替換的次數,若是沒有指定,則只會替換第一個遇到的json

如何去除字符串中的空格?

去除字符串中空格分爲 3 種網絡

  • 去除兩端的空格
  • 去除左邊的空格
  • 去除右邊的空格
# 去除字符串中的空格
strToStrip = '   abc   '
print(strToStrip.strip()) # 去除兩端空格
print(strToStrip.lstrip()) # 去除左邊空格
print(strToStrip.rstrip()) # 去除右邊空格

如何子字符串是否包含在父字符串中?

child_str = 'abc'
print('abcd'.find(child_str)) # 若是存在就返回首字母下標,不存在返回 -1

python 有哪些有用的容器?

學過 java 的都知道,在 java 中使用最多的容器有 List, Map, Set, Array,這些容器可讓咱們方便的存儲並操做數據,那麼 python 中又有哪些相似的容器可供咱們使用呢?數據結構

列表 list

python 中也有列表,功能包含了 java 列表,並且更牛的是它能夠 包含不一樣類型的元素
app

['a', 10, 1.5] # 這就是一個列表,只須要方括號包起來便可

如何遍歷一個列表

有兩種方式可實現框架

  • for 循環的方式,這固然是最多見的
list = ['a', 1, 1.4]

for item in list:
  print(item)

在只須要讀取列表的元素自己時這種方式固然很優雅。但若是須要獲取元素的下標,就力不從心了,這就須要下面的方式。

  • 使用內置函數 range 和 len, 操做元素下表
list = ['a', 1, 1.4]
for i in range(len(list)):
  list[i] = list[i] * 2
  print(list[i])

如何對列表切片?

pyton 中專門有切片操做符 :, 想切多厚切多厚,這可比 java 要方便很多。
經過例子來感覺下吧。

alpha_list = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
print(alpha_list[1:3]) # ['b', 'c']
print(alpha_list[:4]) # ['a', 'b', 'c', 'd']
print(alpha_list[2:]) # ['c', 'd', 'e', 'f', 'g']
print(alpha_list[:]) # ['a', 'b', 'c', 'd', 'e', 'f', 'g']

如何給列表添加元素?

有四種方式

  • 在列表尾部添加元素 append(value)
  • 將一個列表中的每一個元素分別添加到另外一個列表上 extend(list)
  • 將一個元素插入到列表的指定位置 insert(index, value)
  • + 號,將兩個 list 直接相加, 會返回一個新的 list 對象

碼字太多了,本身都暈了,直接上代碼。

list1 = ['a', 'b', 'c', 'd']
list1.append('e')
print(list1) # ['a', 'b', 'c', 'd', 'e']

list2_1 = ['a', 'b', 'c', 'd'] 
list2_2 = ['e', 'f', 'g']
list2_1.extend(list2_2)
print(list2_1) # ['a', 'b', 'c', 'd', 'e', 'f', 'g']


list3 = ['a', 'c', 'd']
list3.insert(1, 'b') # ['a', 'b', 'c', 'd'] 
print(list3)

# 內存多餘消耗,不推薦
list4_1 = ['a', 'b']
list4_2 = ['c', 'd']
print(list4_1 + list4_2) # ['a', 'b', 'c', 'd']

刪掉元素

也有幾種方法可實現

  1. 修改列表,彈出被刪除的值 pop(index)
  2. 知道要刪除的元素時 remove(value)
  3. 不須要使用刪除的值時 del(index)
  4. 刪除多個值 del(index_begin, index_end)

上代碼

remove_list_1 = ['a', 'b', 'c']
print(remove_list_1.pop(0))
print(remove_list_1)# ['b', 'c']

remove_list_2 = ['a', 'b', 'c']
del remove_list_2[1]
print(remove_list_2)# ['a', 'c']


remove_list_3 = ['a', 'b', 'c']
remove_list_3.remove('b')
print(remove_list_3) # ['a', 'c']

remove_list_4 = ['a', 'b', 'c']
del remove_list_4[1:2]
print(remove_list_4)# ['a', 'c']

字典 dict

dict 和 java 中 Map 很是相似,也是由 keyvalue 組成的,也是
使用 散列表 的算法存儲, 用過 java 的同窗就直接把它當作 Java HashMap 來用就能夠啦。另外,在語法上要比 java 也要簡潔很多。

建立 dict 添加元素

a_dict = dict() # 這樣就建立了一個空字典
a_dict['one'] = 1 # 塞進去一個元素

not_empty_dict = {'one': 1, 'two': 2, 'three': 3} # 這是一個包含數據的字典

遍歷 dict

使用 for 循環遍歷全部字典,能夠遍歷字典中的 key,這樣的遍歷是沒有特定順序的,若是想按照順序遍歷須要使用內置函數 sorted

d = {'b': 2, 'a': 1, 'c': 3}

for item_key in d:
  print(item_key, d[item_key])


for item_key in sorted(d):
 print(item_key, d[item_key])

那我若是想要遍歷 dict 中的 values 呢?
還真有一個方法叫 values(), 它會返回一個值集合,並能夠應用 in 操做符遍歷

d = {'b': 2, 'a': 1, 'c': 3}

for value in d.values():
  print(value)

for sorted_value in sorted(d.values()):
  print(sorted_value)

元組

什麼是元組? java 中可沒有聽過內置元組這樣的數據結構。

在前面已經講了列表,知道一個列表能夠存儲多個數據結構。元組和列表很像,但要記住它們間的一個重要區別: 元組是不可變的

如何建立元組?

  1. 把各個類型的元素用逗號分隔,就能夠獲得一個元組,爲了好看,經常用括號再圍起來
  2. 使用內置函數 tuple() 也能夠建立元組

注意,因爲元組是不可變的,沒法修改它的元素。但咱們可使用將多個元組結合成一個新的元組。(元組也支持 +

tuple_a = 1, 2, 3, 4, 5

tuple_b = (1, 2, 3, 4, 5)

# tuple 內置函數的參數必須是一個序列
tupe_c = tuple('12345') # 字符串 
tuple_e = tuple([1, 2, 3, 4, 5]) # 列表
tuple_f = tuple((1,2,3,4,5)) # 元組

tuple_d = tuple_a + tuple_b
print(tuple_d)

元組有什麼用?

既然 python 中有這麼個數據結構,天然就有它的用武之地。還別說,它的用途還真很多。

  • 交換變量對多個變量賦值 更方便,優雅了
a = 5
b = 4
a,b = b,a
# 等式左邊是一個變量的元組
# 等式右邊是表達式的元組,能夠是(字符串,列表,元組都行)

c,d = (1,2), [1,2,3]
print(c)
print(d)
  • 能夠在函數中返回多個值,將它們裝到元組裏就行
def min_max(list):
  return min(list), max(list)

num_list = [3, 1, 5, 2]
print(min_max(num_list))

其餘

上面講述的都是一些大的主題,除了這些,還有一些相對小些的。
雖然小,但也很重要。這些小且重要的部分都在這個部分存放吧。

全局變量是如何處理的?

咱們知道 java 中因爲變量類型的存在,能夠在一個 class 內聲明全局變量,從而在 class 的各個方法中讀取和賦值。

而這點在 python 中倒是行不通的,由於 python 中沒有變量類型, 若是在文件中聲明一個全局變量,再在函數內對這個變量賦值,會直接致使錯誤產生。這是由於在函數內又從新建立了一個局部變量。讀取全局變量也有這個問題。

那該怎麼辦呢?嗯~o( ̄▽ ̄)o global 關鍵字就要登場了。

在函數內部,使用全局變量前,先用 global 關鍵字聲明下這個變量,表示這個變量是全局變量,後面再使用就 okay啦。

上栗子...

g_variable = 3

def test_g_variable():
  global g_variable
  print(g_variable) # 3
  g_variable = 2
  print(g_variable) # 2

test_g_variable()

結語

上面並無把 python 講完,還有 類和對象,文件JSON處理, 網絡 等重要主題,這些會在下篇文章中涉及,敬請期待。

相關文章
相關標籤/搜索