目錄
一、從列表中獲取元素
二、從列表刪除元素
三、列表分片
四、列表分片的高階玩法
五、課後題
跟陣列一樣,我們可以通過元素的索引值index從列表獲取單個元素,注意,列表索引值是從0開始的。
下面實現了讓列表的前兩個位置互換
remove()方法並不能指定刪除某個位置的元素,這時要用del實現。del是乙個語句,不是乙個列表的方法。如果想刪除整個列表,還可以直接用del加列表名刪除
3.pop()
python中的列表是利用棧來進行儲存的,pop()方法預設是彈出列表中的最後乙個元素。當你為pop()方法加上乙個索引值作為引數時,它會彈出這個索引值所對應的元素
利用索引值,我們可以每次從列表獲取乙個元素。當我們一次性需要獲取多個元素,可以利用分片來簡單實現我們的要求
1.用乙個冒號隔開兩個索引值,左邊是開始的位置,右邊是結束的位置。注意,結束位置上的元素是不包括的。利用列表分片,可以得到原來列表的拷貝,原來的列表並沒有發生改變。
2.如果沒有開始位置,預設開始位置是0。
3,如果要得到從指定索引值到列表末尾的所有元素,把結束位置元素省去即可。
4.如果沒有索引值,而只是乙個冒號,將會得到整個列表的拷貝
注意,列表分片就是建立原列表的乙個拷貝,所以你想對列表做出某些修改,但同時你想保持原來那個列表,那麼直接使用列表分片的方法來獲取拷貝就很方便了。
分片操作還可以接受第三個引數作為步長,預設情況下是1
如果列表分片寫為[::2]
如果列表分片寫為[::-1],將會得到乙個反轉的原列表
測試題:
0. 下邊的列表分片操作會列印什麼內容?
>>> list1 = [1, 3, 2, 9, 7, 8]
>>> list1[2:5]
1. 請問 list1[0] 和 list1[0:1] 一樣嗎?
2. 如果你每次想從列表的末尾取出乙個元素,並將這個元素插入到列表的最前邊,你會怎麼做?
3. 有些魚油比較調皮,他說我想試試 list1[-3:-1] 會不會報錯,怎麼知道一試居然顯示 [9, 7],這是怎麼回事呢?
4. 在進行分片的時候,我們知道分片的開始和結束位置需要進行指定,但其實還有另外乙個隱藏的設定:步長。
「在普通的分片操作中,步長預設設定為
1
,表示逐個遍歷元素。其實我們可以人為調整步長以達到不可告人的秘密。」
>>> list1[0:6:2]
[1, 2, 7]
那麼依你推測,關於步長的知識點還有哪些(很多知識點都是通用的)?
5. 課堂上小甲魚說可以利用分片完成列表的拷貝 list2 = list1[:],那事實上可不可以直接寫成 list2 = list1 更加簡潔呢?
答案0.
1.不一樣。前者返回的是列表的第0個元素,後者返回的是只含有第0個元素的列表
2.小甲魚答案:
這裡我歪打正著產生了些許疑問,疑問和解決方案詳見**:參考外鏈
python 的列表很聰明,竟然支援負數索引,如圖:
正常索引是從左到右索引,負數索引是從右到左。
4.1) 之前提到的「簡潔」分片操作在這裡有效:
>>> list1[::2]
[1, 2, 7]
2) 步長不能為0,要不就走不動了:
>>> list1[::0]
traceback (most recent call last):
file "", line 1, in list1[::0]
valueerror: slice step cannot be zero
3) 步長可以是負數,改變方向(從尾部開始向左走)
>>> list1[::-2]
[8, 9, 3]
5.是不可以的。根據我們之前使用分片建立列表的拷貝
看上去貌似是一樣的,但是我們對list1進行排序
發現了吧,list1進行排序,list2並沒有受到影響,list3跟著list1改變了。這是因為python的變數就像乙個標籤,就乙個名字而已,貼哪是哪,指哪打哪。
列表 乙個打了激素的陣列1
有時候我們需要把一堆東西暫時儲存起來,因為他們有某種直接或者間接的聯絡,我們需要把他們放在某種 組 或者 集合 中,這將來可能要用上。很多接觸過程式設計的朋友都知道或者聽說過陣列,陣列這個概念呢,就是把一大堆同種型別的資料挨個兒擺在一塊兒,然後通過陣列下標進行索引。但是呢,陣列有乙個基本要求,就是你...
Python 列表 乙個打了激素的陣列
測試題 0.列表都可以存放一些什麼東西?答 我們說 python 的列表是乙個打了激素的陣列,如果把陣列比喻成貨櫃,那麼 python 的列表就是乙個大倉庫,ta 可以存放我們已經學習過的任何資料型別。mix 1,小甲魚 3.14,1,2,3 1.向列表增加元素有哪些方法?方法是將引數作為乙個元素增...
mysql 表列表 乙個MySQL表中的多列表顯示
從mysql表中顯示多列時遇到問題 這很簡單 我有28條記錄,我想做7行4行 每條記錄只有兩列 id 和name 表中的 控制代碼 我的問題是,當我使用 i 我究竟做錯了什麼?我是否需要另外乙個if宣告?不知道我要去 錯.這是我到目前為止的地方 table header.echo do fetch ...