list 根据某个数字所在位置_富玩车穷玩表,一个案例轻松认识python列表List——计算Hadamard 乘积...
計算兩個矩陣的 Hadamard 乘積, 矩陣的 Hadamard 積就是兩個同維矩陣的逐元素對應相乘,cij=aij×bij。要求輸入矩陣的行/列數(在這里假設我們使用的是 n × n 的矩陣)
Python 有許多內建的數據結構。數據結構(data structure)是計算機中存儲、組織數據的方式。
1、列表
序列是 Python 中最基本的數據結構。
序列中的每個值都有對應的位置值,稱之為索引,第一個索引是 0,第二個索引是 1,依此類推。
Python 有 6 個序列的內置類型,但最常見的是列表和元組。
列表都可以進行的操作包括索引,切片,加,乘,檢查成員。
此外,Python 已經內置確定序列的長度以及確定最大和最小的元素的方法。
列表是最常用的 Python 數據類型,它可以作為一個方括號內的逗號分隔值出現。
列表的數據項不需要具有相同的類型
創建一個列表,只要把逗號分隔的不同的數據項使用方括號括起來即可。
list1 = ['Google', 'Runoob', 1997, 2000]
list2 = [1, 2, 3, 4, 5 ]
2、訪問列表中的值
與字符串的索引一樣,列表索引從 0 開始,第二個索引是 1,依此類推。
通過索引列表可以進行截取、組合等操作。
索引也可以從尾部開始,最后一個元素的索引為 -1,往前一位為 -2,以此類推。
使用下標索引來訪問列表中的值,同樣你也可以使用方括號 [] 的形式截取字符;列表截取可以接收第三個參數,參數作用是截取的步長。
3、更新列表
append() 方法來添加列表項
4、刪除列表元素
del 語句來刪除列表的的元素
5、列表操作符
| len( ) | 長度 |
| + | 組合 |
| * | 重復 |
| In | 元素是否存在于列表中 |
6、嵌套列表
使用嵌套列表即在列表里創建其它列表
7、列表函數
| 1 | len(list) | 列表元素個數 |
| 2 | max(list) | 返回列表元素最大值 |
| 3 | min(list) | 返回列表元素最小值 |
| 4 | list(seq) | 將元組轉換為列表 |
8、列表方法
| 1 | list.append(obj) | 在列表末尾添加新的對象 |
| 2 | list.count(obj) | 統計某個元素在列表中出現的次數 |
| 3 | list.extend(seq) | 在列表末尾一次性追加另一個序列中的多個值(用新列表擴展原來的列表) |
| 4 | list.index(obj) | 從列表中找出某個值第一個匹配項的索引位置 |
| 5 | list.insert(index, obj) | 對象插入列表 |
| 6 | list.pop([index=-1]) | 移除列表中的一個元素(默認最后一個元素),并且返回該元素的值 |
| 7 | list.remove(obj) | 移除列表中某個值的第一個匹配項 |
| 8 | list.reverse() | 反向列表中元素 |
| 9 | list.sort( key=None, reverse=False) | 對原列表進行排序 |
| 10 | list.clear() | 清空列表 |
| 11 | list.copy() | 復制列表 |
9、將列表當做堆棧使用
列表方法使得列表可以很方便的作為一個堆棧來使用,堆棧作為特定的數據結構,最先進入的元素最后一個被釋放(后進先出)。
用 append() 方法可以把一個元素添加到堆棧頂。用不指定索引的 pop() 方法可以把一個元素從堆棧頂釋放出來。
>>>?stack?=?[3,?4,?5]>>>?stack.append(6)
>>>?stack
[3,?4,?5,?6]
>>>?stack.pop()
6
>>>?stack
[3,?4,?5]
10、將列表當作隊列使用
也可以把列表當做隊列用,只是在隊列里第一加入的元素,第一個取出來;但是拿列表用作這樣的目的效率不高。在列表的最后添加或者彈出元素速度快,然而在列表里插入或者從頭部彈出速度卻不快(因為所有其他的元素都得一個一個地移動)。
>>>?from?collections?import?deque>>>?queue?=?deque(["Eric",?"John",?"Michael"])
>>>?queue.append("Terry")?????????????????
>>>?queue.popleft()????????????????
'Eric'
11、列表推導式
列表推導式提供了從序列創建列表的簡單途徑。通常應用程序將一些操作應用于某個序列的每個元素,用其獲得的結果作為生成新列表的元素,或者根據確定的判定條件創建子序列。
每個列表推導式都在 for 之后跟一個表達式,然后有零到多個 for 或 if 子句。返回結果是一個根據表達從其后的 for 和 if 上下文環境中生成出來的列表。如果希望表達式推導出一個元組,就必須使用括號。
#將列表中每個數值乘三,獲得一個新的列表:>>>?vec?=?[2,?4,?6]
>>>?[3*x?for?x?in?vec]
[6,?12,?18]
>>>?[[x,?x**2]?for?x?in?vec]
[[2,?4],?[4,?16],?[6,?36]]
>>>?freshfruit?=?['??banana',?'??loganberry?',?'passion?fruit??']
>>>?[weapon.strip()?for?weapon?in?freshfruit]
['banana',?'loganberry',?'passion?fruit']
用 if 子句作為過濾器:
>>>?[3*x?for?x?in?vec?if?x?>?3][12,?18]
>>>?[3*x?for?x?in?vec?if?x?2]
[]
以下是一些關于循環和其它技巧的演示:
>>>?vec1?=?[2,?4,?6]>>>?vec2?=?[4,?3,?-9]
>>>?[x*y?for?x?in?vec1?for?y?in?vec2]
[8,?6,?-18,?16,?12,?-36,?24,?18,?-54]
>>>?[x+y?for?x?in?vec1?for?y?in?vec2]
[6,?5,?-7,?8,?7,?-5,?10,?9,?-3]
>>>?[vec1[i]*vec2[i]?for?i?in?range(len(vec1))]
[8,?12,?-54]
列表推導式可以使用復雜表達式或嵌套函數:
>>>?[str(round(355/113,?i))?for?i?in?range(1,?6)]['3.1',?'3.14',?'3.142',?'3.1416',?'3.14159']
12、嵌套列表解析
Python的列表還可以嵌套。
3X4的矩陣列表:
>>>?matrix?=?[...?????[1,?2,?3,?4],
...?????[5,?6,?7,?8],
...?????[9,?10,?11,?12],
...?]
將3X4的矩陣列表轉換為4X3列表:
>>>?[[row[i]?for?row?in?matrix]?for?i?in?range(4)][[1,?5,?9],?[2,?6,?10],?[3,?7,?11],?[4,?8,?12]]
也可以使用以下方法來實現:
>>>?transposed?=?[]>>>?for?i?in?range(4):
...?????transposed.append([row[i]?for?row?in?matrix])
...
>>>?transposed
[[1,?5,?9],?[2,?6,?10],?[3,?7,?11],?[4,?8,?12]]
另外一種實現方法:
>>>?transposed?=?[]>>>?for?i?in?range(4):
...?????transposed_row?=?[]
...?????for?row?in?matrix:
...?????????transposed_row.append(row[i])
...?????transposed.append(transposed_row)
...
>>>?transposed
[[1,?5,?9],?[2,?6,?10],?[3,?7,?11],?[4,?8,?12]]
13、del 語句
使用 del 語句可以從一個列表中依索引而不是值來刪除一個元素。這與使用 pop() 返回一個值不同。可以用 del 語句從列表中刪除一個切割,或清空整個列表(我們以前介紹的方法是給該切割賦一個空列表)。
>>>?a?=?[-1,?1,?66.25,?333,?333,?1234.5]>>>?del?a[0]
>>>?a
[1,?66.25,?333,?333,?1234.5]
>>>?del?a[2:4]
>>>?a
[1,?66.25,?1234.5]
>>>?del?a[:]
>>>?a
[]
也可以用 del 刪除實體變量:
>>>?del?a14、編程實現
計算兩個矩陣的 Hadamard 乘積, 矩陣的 Hadamard 積就是兩個同維矩陣的逐元素對應相乘,cij=aij×bij。要求輸入矩陣的行/列數(在這里假設我們使用的是 n × n 的矩陣)
n?=?int(input("輸入數字n:?"))print("輸入矩陣A")
a?=?[]
for?i?in?range(n):????
a.append([int(x)?for?x?in?input().split()])
print("輸入矩陣B")
b?=?[]
for?i?in?range(n):
b.append([int(x)?for?x?in?input().split()])
#計算Hadamard矩陣
c?=?[]
for?i?in?range(n):
c.append([a[i][j]?*?b[i][j]?for?j?in?range(n)])
print("生成的Hadamard矩陣")
print("-"?*?7?*?n)???#分隔符-----
for?x?in?c:
????for?y?in?x:
????????print(str(y).rjust(5),?end='?')
????print()
print("-"?*?7?*?n)????#分隔符-----
使用了幾次列表推導式。
[int(x) for x in input().split()] 首先通過 input() 獲得用戶輸入的字符串,再使用 split() 分割字符串得到一系列的數字字符串,然后用 int() 從每個數字字符串創建對應的整數值。
[a[i][j] * b[i][j] for j in range(n)] 來得到矩陣乘積的每一行數據。
15、rjust()
返回一個原字符串右對齊,并使用空格填充至長度 width 的新字符串。如果指定的長度小于字符串的長度則返回原字符串。
str.rjust(width[, fillchar])
參數
width -- 指定填充指定字符后中字符串的總長度.
fillchar -- 填充的字符,默認為空格。
總結
以上是生活随笔為你收集整理的list 根据某个数字所在位置_富玩车穷玩表,一个案例轻松认识python列表List——计算Hadamard 乘积...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hashmap应用场景_京东4面(Jav
- 下一篇: xampp打开mysql的admin访问