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