Python Cookbook-4.8 二維陣列變換

任務

需要變換一個列表的列表,將行換成列,列換成行。

解決方案

需要一個列表,其中的每一項都是同樣長度的列表,像這樣

arr = [[1,2,3],[4,5,6],[7,8,9],[10,11,12]]

列表推導提供了簡單方便的方法以完成二維陣列的轉換:

print [[r[col] for r in arr] for col in range(len(arr[0]))]
[[1,4,7,10],[2,5,8,11],[3,6,9,12]]

另一個更快也更讓人困惑的方法(輸出是一樣的)是利用內建函數zip 實現的:

print map(list,zip(*arr))

討論

本節展示了一種簡潔而清晰的轉換方式,還有一個更快速的備選方案。在需要簡潔和清晰并存的時候,列表推導通常是很好的選擇,而備選方案利用內建函數 zip 以另外一種方式達到目的,顯得很晦澀難懂。

有時,你獲得的數據的順序是不正確的。舉個例子,如果使用微軟的ActiveX DataObjects(ADO)數據庫接口,由于Python和微軟的首選實現語言(VisualBasic)在對數組元素排序上的差異,Getrows方法返回的實際上是Python中的列。本節針對這種常見需求提出的兩種解決方案,讓你有機會在清晰和速度之間進行選擇。

在列表推導的解決方案中,內層推導改變的是(從行中)選出的元素,外層推導則影響選擇子(selector,即列)。由此實現轉換。

而基于 zip 的解決方案,我們使用了*a語法將 arr 中的每個元素(行),根據順序,作為分隔開的參數傳遞給 zip。zip 返回的是元組的列表,其實已經完成了轉換。通過 map調用,我們可以對每個元組調用 list,以獲得一個列表的列表。既然我們不能將 zip 的結果直接當做列表使用,我們可以通過使用itertools.izip 來得到一點改進(因為 izip 并不會將結果當做列表載入內存,而是每次生成一個子項):

import itertools
print map(list,itertools.izip(*arr))

不過,對這個例子而言,這一點速度提升也許并不能抵消它所帶來的復雜性。

如果要轉換非常巨大的數字陣列,可以考慮Numeric Python和其他的第三方包。NumericPython 支持一系列變換以及軸旋轉,這些數學轉換能把大多數人繞暈。

*args 和**kwds 語法

*args(*通常緊跟一個標識符,你會看到a或者 args 都是標識符)是Python用于接收或者傳遞任意基于位置的參數的語法。當你接收到一個用這種語法描述的參數時(比如你在函數的def語句中對函數簽名使用了星號語法),Python 會將此標識符綁定到一個元組,該元組包含了所有基于位置的隱式地接收到的參數。當你用這種語法傳遞參數時,標識符可以被綁定到任何可選代對象(事實上,它也可以是任何表達式,并不必須是一個標識符,只要這個表達式的結果是一個可迭代對象即可)。

**kwds(標識符可以是任意的,通常用k或者kwds 表示)是Python 用于接收或者傳遞任意命名的參數的語法。(Python有時候會將命名參數稱為關鍵字參數,它們其實并不是關鍵字——只是用它們來給關鍵字命名,比如pass、for或 yield,還有很多。不幸的是,這種讓人疑惑的術語目前仍是這門語言及其文化的根深蒂固的一個組成部分。)當你接收到用這種語法描述的一個參數時(比如你在函數的def語句中對函數簽名使用了雙星號語法),Python 會將標識符綁定到一個字典,該字典包含了所有接收到的隱式的命名參數。當你用這種語法傳遞參數時,標識符只能被綁定到字典(其實它也可以是表達式,不一定是一個標識符,只要這個表達式的結果是一個字典即可)。

當你在定義或調用一個函數的時候,必須確保*a和**k 在其他所有參數之后。如果這兩者同時出現,要將**k放在*a之后。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/72895.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/72895.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/72895.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

B樹與B+樹在MySQL中的應用:索引

數據結構演示網站:Data Structure Visualization 先來了解兩個數據結構B樹與B樹 B樹: N階B樹每個節點最多存儲N-1個Key,N個指針 例如:一個5階B樹,當前節點存儲到5個Key時,中間的數會向上分離,…

【重構小程序】基于Tika和Langchain4J進行文件解析和文本切片(二)

為了將大語言模型植入到小程序中,來支持用戶的問答。那我們首先需要做的是什么呢,不是引入大語言模型,而且為大語言模型搭建一個私有化知識庫,但是這是這節呢,我們先不搭建私有化知識庫,在這之前&#xff0…

python|exm6-1try-except結構|raise關鍵字|異常類型

目錄 一、try-expect 1. 多個try-expect結構的使用 1.1 捕捉特定異常 1.2 捕捉全部異常 1.3 所有異常合并處理 2. try-except-else-finally 結構 二、raise 關鍵字 一、try-expect try-expect 結構是 Python 中用于異常處理的關鍵機制。它允許你捕獲并處理代碼中可能發生…

小藍的括號串1(棧,藍橋云課)

問題描述 小藍有一個長度為 nn 的括號串,括號串僅由字符 ( 、 ) 構成,請你幫他判斷一下該括號串是否合法,合法請輸出 Yes ,反之輸出 No 。 合法括號序列: 空串是合法括號序列。 若 ss 是合法括號序列,則 (…

Centos7配置本地yum源

Centos7配置本地yum源 1、基于iso鏡像的centos源 1.1 準備iso <span style"color:#000000"><span style"background-color:#ffffff"><code class"language-bash"><span style"color:#008000"># 首先看自己使用…

VNA操作使用學習-14 再測晶振特性

再測一下4Mhz晶振&#xff0c;看看特性曲線&#xff0c;熟悉一下vna使用。 s11模式&#xff0c;找遍了各種format都無法顯示&#xff0c;只有這一種&#xff08;s11&#xff0c;Resistance&#xff09;稍微顯示出一個諧振&#xff0c;但是只有一個點。 s21模式 這是201p&#…

Tr0ll2靶機詳解

一、主機發現 arp-scan -l靶機ip&#xff1a;192.168.55.164 二、端口掃描、漏洞掃描、目錄枚舉、指紋識別 2.1端口掃描 nmap --min-rate 10000 -p- 192.168.55.164發現21端口的ftp服務開啟 以UDP協議進行掃描 使用參數-sU進行UDP掃描 nmap -sU --min-rate 10000 -p- 19…

基于開源模型的微調訓練及瘦身打造隨身掃描儀方案__用AI把手機變成文字識別小能手

基于開源模型的微調訓練及瘦身打造隨身掃描儀方案__用AI把手機變成文字識別小能手 一、準備工作&#xff1a;組裝你的"數碼工具箱" 1. 安裝基礎工具&#xff08;Python環境&#xff09; 操作步驟&#xff1a; 訪問Python官網下載安裝包安裝時務必勾選Add Python to…

GitHub 超火的開源終端工具——Warp

Warp 作為近年來 GitHub 上備受矚目的開源終端工具&#xff0c;以其智能化、高性能和協作能力重新定義了命令行操作體驗。以下從多個維度深入解析其核心特性、技術架構、用戶評價及生態影響力&#xff1a; 一、背景與核心團隊 Warp 由前 GitHub CTO Jason Warner 和 Google 前…

使用C#創建安裝Windows服務程序

在實際工作中&#xff0c;如果我們需要開發一個運行在后臺&#xff0c;無需用戶交互&#xff0c;不需要界面的應用程序&#xff0c;我們可以通過Windows服務來實現。 本文主要介紹如何基于C#創建一個Windows服務&#xff0c;來實現西門子PLC的定時讀取保存。 一、Windows服務…

docker、docker-compose常用命令

初學者使用的docker、docker-compose常用命令&#xff0c;日常練習&#xff0c;環境簡單搭建。 一、docker 1.1、安裝docker 1.1.1、yum安裝 #安裝docker的數據存儲驅動包 yum install -y yum-utils device-mapper-persistent-data lvm2 #設置新的安裝源、下載配置文件到…

阿里的MNN源碼如何編譯成so文件,供Android調用

在Ubtuntu下面的編譯&#xff0c;先整理編譯環境 1、安裝環境依賴 # 安裝必要工具 sudo apt update sudo apt install -y cmake ninja-build git wget # 安裝Android NDK&#xff08;建議使用r21版本或更高&#xff09; wget https://dl.google.com/android/repository/a…

吳恩達機器學習筆記復盤(六)梯度下降算法

簡介 梯度下降&#xff08;Gradient Descent&#xff09;是一種常用的優化算法&#xff0c;廣泛應用于機器學習、深度學習等領域&#xff0c;在這里是用于求J&#xff08;w,b&#xff09;局部最小值。 我自己覺得這樣說有點過于抽象。換個直觀點的說法就是&#xff0c;一個人…

使用JAVA-進行維吉尼亞密碼的解密與加密

維吉尼亞密碼 來源于百度百科 維吉尼亞密碼_百度百科 具體代碼 import java.util.*;public class WJMYmm {//常量 26public static final int N 26;//密碼public static void main(String[] args) {//字母String ZM"abcdefghijklmnopqrstuvwxyz";char[] zm ZM.…

Java DelayQueue 延遲隊列

Java DelayQueue 延遲隊列 1. DelayQueue 概述 DelayQueue 是 Java 并發包&#xff08;java.util.concurrent&#xff09;中的一個 無界 阻塞隊列&#xff0c;用于存儲實現了 Delayed 接口的元素。隊列中的元素只有在達到指定的延遲時間后才能被獲取。 2. DelayQueue 的底層…

LeetCode 解題思路 22(Hot 100)

解題思路&#xff1a; 遞歸思路&#xff1a; 傳入當前節點的最小值和最大值&#xff0c;遞歸判斷左右子樹。結束條件&#xff1a; 當前節點為空或不滿足二叉搜索樹。 Java代碼&#xff1a; class Solution {public boolean isValidBST(TreeNode root) {return isValidBST(ro…

樂享數科:政策助推假日經濟,2月普惠金融-景氣指數穩中有升

數據顯示&#xff0c;2025年2月普惠金融-景氣指數達48.99點&#xff0c;較1月上升0.03點。 企業運行持續向好&#xff0c;企業信心預期和經營活力回升。“假日經濟”與“政策效應”相互疊加&#xff0c;市場供求格局有所改善&#xff0c;景氣水平穩步恢復。 普惠金融-景氣指數…

leetcode日記(108)驗證回文串

看上去很簡單&#xff0c;其實很麻煩。 一開始寫的遞歸&#xff0c;但是內存超限……搜了下發現原因是每次遞歸調用都會創建一個新的字符串副本&#xff0c;這在處理長字符串時會占用大量內存。 class Solution { public:bool isPalindrome(string s) {if(s.size()0||s.size(…

用css繪制收銀鍵盤

最近需求說需要自己弄個收銀鍵盤&#xff0c;于是乎直接上手搓 主要基于Vue3寫的&#xff0c;主要是CSS <template><view class"container"><view class"info"><image class"img" src"" mode"">&l…

智能車間管理系統(源碼+文檔+講解+演示)

引言 在現代制造業中&#xff0c;智能車間管理系統正成為推動工業4.0和智能制造的關鍵力量。它通過整合先進的信息技術和自動化技術&#xff0c;優化生產流程&#xff0c;提高生產效率&#xff0c;降低成本&#xff0c;并確保產品質量。 系統概述 智能車間管理系統采用前后端…