導航:首頁 > 編程語言 > tuplespython

tuplespython

發布時間:2023-02-14 06:51:35

python中如何表示多維數組

在Python中,一個像這樣的多維表格可以通過「序列的序列」實現。一個表格是行的序列。每一行又是獨立單元格的序列。這類似於我們使用的數學記號,在數學里我們用Ai,j,而在Python里我們使用A[i][j],代表矩陣的第i行第j列。
這看起來非常像「元組的列表」(Lists of Tuples)。
「列表的列表」示例:
我們可以使用嵌套的列表推導式(list comprehension)創建一個表格。 下面的例子創建了一個「序列的序列」構成的表格,並為表格的每一個單元格賦值。
table= [ [ 0 for i in range(6) ] for j in range(6) ]print tablefor d1 in range(6):for d2 in range(6):table[d1][d2]= d1+d2+2print table123456程序的輸出結果如下:
[[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]],
[[2, 3, 4, 5, 6, 7], [3, 4, 5, 6, 7, 8], [4, 5, 6, 7, 8, 9],
[5, 6, 7, 8, 9, 10], [6, 7, 8, 9, 10, 11], [7, 8, 9, 10, 11, 12]]
1234
這個程序做了兩件事:創建了一個6 × 6的全0表格。 然後使用兩枚骰子的可能組合的數值填充表格。 這並非完成此功能最有效的方式,但我們通過這個簡單的例子來演示幾項技術。我們仔細看一下程序的前後兩部分。
程序的第一部分創建並輸出了一個包含6個元素的列表,我們稱之為「表格」;表格中的每一個元素都是一個包含6個0元素的列表。它使用列表推導式,對於范圍從0到6的每一個j都創建對象。每一個對象都是一個0元素列表,由i變數從0到6遍歷產生。初始化完成之後,列印輸出二維全0表格。
推導式可以從里向外閱讀,就像一個普通表達式一樣。內層列表[ 0 for i in range(6) ]創建了一個包含6個0的簡單列表。外層列表[ [...] for j in range(6) ]創建了這些內層列表的6個深拷貝。
程序的第2個部分對2個骰子的每一個組合進行迭代,填充表格的每一個單元格。這由兩層嵌套循環實現,每一個循環迭代一個骰子。外層循環枚舉第一個骰子的所有可能值d1。內層循環枚舉第二個骰子d2。
更新每一個單元格時需要通過table[d1]選擇每一行;這是一個包含6個值的列表。這個列表中選定的單元格通過...[d2]進行選擇。我們將擲骰子的值賦給這個單元格,d1+d2+2。
其他示例:
列印出的列表的列表不太容易閱讀。下面的循環會以一種更加可讀的形式顯示表格。
for row in table:
print row[2, 3, 4, 5, 6, 7]
[3, 4, 5, 6, 7, 8]
[4, 5, 6, 7, 8, 9]
[5, 6, 7, 8, 9, 10]
[6, 7, 8, 9, 10, 11]
[7, 8, 9, 10, 11, 12]
12345678910111213作為練習,讀者可以試著在列印列表內容時,再列印出行和列的表頭。提示一下,使用"%2d" % value字元串運算符可以列印出固定長度的數字格式。顯示索引值(Explicit Index Values)。
我們接下來對骰子表格進行匯總統計,得出累計頻率表。我們使用一個包含13個元素的列表(下標從0到12)表示每一個骰子值的出現頻率。觀察可知骰子值2在矩陣中只出現了一次,因此我們期望fq[2]的值為1。遍歷矩陣中的每一個單元格,得出累計頻率表。
fq= 13 * [0]for i in range(6):for j in range(6):c= table[i][j]fq[ c ] += 112345使用下標i選出表格中的行,用下標j從行中選出一列,得到單元格c。然後用fq統計頻率。
這看起來非常的數學和規范。
Python提供了另外一種更簡單一些的方式。
使用列表迭代器而非下標,表格是列表的列表,可以採用無下標的for循環遍歷列表元素。
fq= 13 * [0]print fqfor row in table:for c in row:fq[c] += 1print fq[2:

② python中值傳遞還是引用傳遞

首先,Python中一切事物皆對象,變數是對對象在內存中的存儲和地址的抽象。所有的變數都可以理解是內存中一個對象的「引用」,或者,也可以看似c中void*的感覺。

python中統一都是引用傳遞,同時要注意類型是屬於對象的,而不是變數。而對象有兩種,「可更改」(mutable)與「不可更改」(immutable)對象。在python中,strings, tuples, 和numbers是不可更改的對象,而list,dict等則是可以修改的對象。

當我們寫下面語句時:

Python解釋器其實順序幹了兩件事情:

從這里可以看出strings類型是不可變數,不可變實際上指的是不會更該字元串,比如把a = '123' 變為 a ='1234' 實際上是先創建了 「1234」 再用a去指向它。
但是,像list,dict等「可更改」的變數,他們會直接再本地更改,不會進行副本拷貝。
簡言之,當在 Python 中 a = sth 應該理解為給 sth 貼上了一個標簽 a。當再賦值給 a 的時候,就好象把 a 這個標簽從原來的 sth 上拿下來,貼到其他對象上,建立新的"引用"。

既然Python只允許引用傳遞,那有沒有辦法可以讓兩個變數不再指向同一內存地址呢?

對於一個復雜對象的子對象並不會完全復制,什麼是復雜對象的子對象呢?就比如序列里的嵌套序列,字典里的嵌套序列等都是復雜對象的子對象。對於子對象,python會把它當作一個公共鏡像存儲起來,所有對他的復制都被當成一個引用,所以說當其中一個引用將鏡像改變了之後另一個引用使用鏡像的時候鏡像已經被改變了。

deep的時候會將復雜對象的每一層復制一個單獨的個體出來。 當然其中主要的操作還是地址問題。

當一個引用傳遞給函數的時候,函數自動復制一份引用,這個函數里的引用和外邊的引用沒有半毛關系了.所以第一個例子里函數把引用指向了一個不可變對象,當函數返回的時候,外面的引用沒半毛感覺.而第二個例子就不一樣了,函數內的引用指向的是可變對象,對它的操作就和定位了指針地址一樣,在內存里進行修改.

引用計數
PyObject是每個對象必有的內容,其中ob_refcnt就是做為引用計數。當一個對象有新的引用時,它的ob_refcnt就會增加,當引用它的對象被刪除,它的ob_refcnt就會減少.引用計數為0時,該對象生命就結束了。

優點:

缺點:

③ Python的函數都有哪些

Python 函數

函數是組織好的,可重復使用的,用來實現單一,或相關聯功能的代碼段。

函數能提高應用的模塊性,和代碼的重復利用率。你已經知道Python提供了許多內建函數,比如print()。但你也可以自己創建函數,這被叫做用戶自定義函數。

定義一個函數

你可以定義一個由自己想要功能的函數,以下是簡單的規則:

④ python如何把一個一元列表變成二元的列表初學求救


#!/usr/bin/envpython2
#coding=utf-8

"""
現在我有一個列表,比如a=['a1','b0','z-1']
其中列表的每一項是中間有空格的字元串,注意是字元串。我想按照字元串的後半部分的升序排列,如何做?
"""

a=['a1','b0','z-1']

tuples=[x.split("")forxina]

printtuples

result=sorted(tuples,key=lambdax:x[1])

printresult


>> 但是我不能a有多長我就生造多長的b吧。肯定是用循環來造,但是想了想,循環也造不出來


這里用 list comprehension 比較好。當然循環也是可以的。

tuples = []

for x in a:

tuples.append(x.split(" "))

⑤ python中的函數是什麼

Python3 函數

函數是組織好的,可重復使用的,用來實現單一,或相關聯功能的代碼段。

函數能提高應用的模塊性,和代碼的重復利用率。你已經知道Python提供了許多內建函數,比如print()。但你也可以自己創建函數,這被叫做用戶自定義函數。

定義一個函數

你可以定義一個由自己想要功能的函數,以下是簡單的規則:

⑥ python zip函數的用法

定義:zip([iterable,
...])
zip()是Python的一個內建函數,它接受一系列可迭代的對象作為參數,將對象中對應的元素打包成一個個tuple(元組),然後返回由這些
tuples組成的list(列表)。若傳入參數的長度不等,則返回list的長度和參數中長度最短的對象相同。利用*號操作符,可以將list
unzip(解壓),看下面的例子就明白了:
1
2
3
4
5
6
7
8
9
>>>
a
=
[1,2,3]
>>>
b
=
[4,5,6]
>>>
c
=
[4,5,6,7,8]
>>>
zipped
=
zip(a,b)
[(1,
4),
(2,
5),
(3,
6)]
>>>
zip(a,c)
[(1,
4),
(2,
5),
(3,
6)]
>>>
zip(*zipped)
[(1,
2,
3),
(4,
5,
6)]
對於這個並不是很常用函數,下面舉幾個例子說明它的用法:
*
二維矩陣變換(矩陣的行列互換)
比如我們有一個由列表描述的二維矩陣
a
=
[[1,
2,
3],
[4,
5,
6],
[7,
8,
9]]
通過python列表推導的方法,我們也能輕易完成這個任務
1
2
print
[
[row[col]
for
row
in
a]
for
col
in
range(len(a[0]))]
[[1,
4,
7],
[2,
5,
8],
[3,
6,
9]]
另外一種讓人困惑的方法就是利用zip函數:
1
2
3
4
5
>>>
a
=
[[1,
2,
3],
[4,
5,
6],
[7,
8,
9]]
>>>
zip(*a)
[(1,
4,
7),
(2,
5,
8),
(3,
6,
9)]
>>>
map(list,zip(*a))
[[1,
4,
7],
[2,
5,
8],
[3,
6,
9]]
這種方法速度更快但也更難以理解,將list看成tuple解壓,恰好得到我們「行列互換」的效果,再通過對每個元素應用list()函數,將tuple轉換為list
*
以指定概率獲取元素
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
>>>
import
random
>>>
def
random_pick(seq,probabilities):
x
=
random.uniform(0,
1)
cumulative_probability
=
0.0
for
item,
item_probability
in
zip(seq,
probabilities):
cumulative_probability
+=
item_probability
if
x
<
cumulative_probability:
break
return
item
>>>
for
i
in
range(15):
random_pick("abc",[0.1,0.3,0.6])
'c'
'b'
'c'
'c'
'a'
'b'
'c'
'c'
'c'
'a'
'b'
'b'
'c'
'a'
'c'
這個函數有個限制,指定概率的列表必須和元素一一對應,而且和為1,否則這個函數可能不能像預想的那樣工作。
稍微解釋下,先利用random.uniform()函數生成一個0-1之間的隨機數並復制給x,利用zip()函數將元素和他對應的概率打包成tuple,然後將每個元素的概率進行疊加,直到和大於x終止循環
這樣,」a」被選中的概率就是x取值位於0-0.1的概率,同理」b」為0.1-0.4,」c」為0.4-1.0,假設x是在0-1之間平均取值的,顯然我們的目的已經達到

⑦ Python 中的列表 List 是可以改變的, 元組 Tuple 是不可以改變的, 那什麼情況下要用到 tuple 呢

Tuple 是不可變 list。 一旦創建了一個 tuple 就不能以任何方式改變它。

Tuple 與 list 的相同之處

定義 tuple 與定義 list 的方式相同, 除了整個元素集是用小括弧包圍的而不是方括弧。
Tuple 的元素與 list 一樣按定義的次序進行排序。 Tuples 的索引與 list 一樣從 0 開始, 所以一個非空 tuple 的第一個元素總是 t[0]。
負數索引與 list 一樣從 tuple 的尾部開始計數。
與 list 一樣分片 (slice) 也可以使用。注意當分割一個 list 時, 會得到一個新的 list ;當分割一個 tuple 時, 會得到一個新的 tuple。

Tuple 不存在的方法

您不能向 tuple 增加元素。Tuple 沒有 append 或 extend 方法。
您不能從 tuple 刪除元素。Tuple 沒有 remove 或 pop 方法。
您不能在 tuple 中查找元素。Tuple 沒有 index 方法。
然而, 您可以使用 in 來查看一個元素是否存在於 tuple 中。

用 Tuple 的好處

Tuple 比 list 操作速度快。如果您定義了一個值的常量集,並且唯一要用它做的是不斷地遍歷它,請使用 tuple 代替 list。
如果對不需要修改的數據進行 「防寫」,可以使代碼更安全。使用 tuple 而不是 list 如同擁有一個隱含的 assert 語句,說明這一數據是常量。如果必須要改變這些值,則需要執行 tuple 到 list 的轉換。

Tuple 與 list 的轉換
Tuple 可以轉換成 list,反之亦然。內置的 tuple 函數接收一個 list,並返回一個有著相同元素的 tuple。而 list 函數接收一個 tuple 返回一個 list。從效果上看,tuple 凍結一個 list,而 list 解凍一個 tuple。

Tuple 的其他應用
一次賦多值
>>> v = ('a', 'b', 'e')
>>> (x, y, z) = v
解釋:v 是一個三元素的 tuple, 並且 (x, y, z) 是一個三變數的 tuple。將一個 tuple 賦值給另一個 tuple, 會按順序將 v 的每個值賦值給每個變數。

⑧ 關於Python 里 tuples 和 list 的區別

tuples 不可以修改(一般情況不可以修改,特殊情況 元素是一個對象引用時,引用的對象可以被修改)
list可以隨時修改內部元素(添加,刪除,修改)

⑨ Python中的Tuple問題

>>>t=([1,2,3],['a','b','c'])
>>>printt
([1,2,3],['a','b','c'])
>>>L=t[0]
>>>printL
[1,2,3]
>>>L=t[1]
>>>printL
['a','b','c']
>>>s=([1,2,3])
>>>prints
[1,2,3]
>>>LL=s[0]
>>>printLL
1
>>>LL=s[2]
>>>printLL
3
>>>

原因是tuple在只有一個元素時,需要在末尾加入「,」消除歧義

>>>ss=([1,2,3],)
>>>LL=ss[0]
>>>printLL
[1,2,3]
>>>LL=ss[1]
Traceback(mostrecentcalllast):
File"<stdin>",line1,in<mole>
IndexError:tupleindexoutofrange
>>>
閱讀全文

與tuplespython相關的資料

熱點內容
usb藍牙android 瀏覽:405
伺服器顯示error1什麼意思 瀏覽:708
python代碼精簡 瀏覽:457
文件加密了怎麼找到了 瀏覽:193
jellyfin插件怎麼選擇主伺服器 瀏覽:836
asp用戶注冊源碼 瀏覽:48
什麼是照片壓縮文件 瀏覽:392
java調用js代碼 瀏覽:979
崑山市民app怎麼修改身份信息 瀏覽:779
php登陸次數 瀏覽:744
python字元轉成數字 瀏覽:822
海川用的是什麼伺服器 瀏覽:376
口才是練出來的pdf 瀏覽:458
雲伺服器哪個公司性價比高 瀏覽:517
源碼論壇打包 瀏覽:558
php怎麼做成word 瀏覽:692
python批量生成密鑰 瀏覽:492
程序員要不要考社區人員 瀏覽:150
app的錢怎麼充q幣 瀏覽:814
android銀行卡識別 瀏覽:756