python一維數組定義
❶ python包含不同長度的list的一維數組用0填充統一長度
matrix=[[1],
[1,2],
[1,2,3],
[1,2,3,4],
[1,2,3,4,5],
[3,4,5],
[2,3,4,5],
]
#現在需要將矩陣中所有的列表長度對齊到最長的列表的長度5,末尾全部用0填充
max_len=max((len(l)forlinmatrix))
new_matrix=list(map(lambdal:l+[0]*(max_len-len(l)),matrix))
print(new_matrix)
❷ Python中定義一個a[100][100]的二維數組怎麼寫,輸出a[i][j]元素應該怎麼寫
摘要 一維數組只有一個下標,稱為一維數組,其數組元素也稱為單下標變數。在實際問題中有很多量是二維的或多維的,因此python允許構造多維數組。那麼python如何定義二維數組呢?一起來了解下吧:
❸ python 數組和列表的區別
Python沒有數組:
1.
只有元組(tuple)和列表(list);
2.
元組一旦創建不可改變,例如:aa=tuple(1,2,3);
3.
元組不能追加(append)元素,彈出(pop)元素等;
4.
只能對元組中的元素進行索引aa[0],不能對其中的元組進行賦值aa[0]=8;
5.
使用元組的好處在於對元組進行操作更為高效,適合存放一組常量;
6.
而上述的眾多不可以,使用列表list是可以的。
❹ 用Python3實現表達式求值
include <malloc.h> #include <stdio.h> #include <ctype.h>//判斷是否為字元的函數的頭文件 #define maxsize 100 typedef int elemtype; typedef struct sqstack sqstack;//由於sqstack不是一個類型 而struct sqstack才是 char ch[7]=;//把符號轉換成一個字元數組 int f1[7]=;//棧內元素優先順序 int f2[7]=;//棧外的元素優先順序 struct sqstack { elemtype stack[maxsize]; int top; }; void Initstack(sqstack *s) { s->top=0; } void Push(sqstack *s,elemtype x) { if(s->top==maxsize-1) printf("Overflow\n"); else { s->top++; s->stack[s->top]=x; } } void Pop(sqstack *s,elemtype *x) { if(s->top==0) printf("underflow\n"); else { *x=s->stack[s->top]; s->top--; } } elemtype Gettop(sqstack s) { if(s.top==0) { printf("underflow\n"); return 0; } else return s.stack[s.top]; } elemtype f(char c) { switch(c) { case '+': return 0; case '-': return 1; case '*': return 2; case '/': return 3; case '(': return 4; case ')': return 5; default: return 6; } } char precede(char c1,char c2) { int i1=f(c1); int i2=f(c2);//把字元變成數字 if(f1[i1]>f2[i2])//通過原來設定找到優先順序 return '>'; else if(f1[i1]<f2[i2]) return '<'; else return '='; } int Operate(elemtype a,elemtype theta,elemtype b) { int sum; switch(theta) { case 0: sum=a+b; break; case 1: sum=a-b; break; case 2: sum=a*b; break; default: sum=a/b; } return sum; } EvaluateExpression() { char c; int i=0,sum=0; int k=1,j=1;//設置了開關變數 elemtype x,theta,a,b; sqstack OPTR,OPND; Initstack(&OPTR); Push(&OPTR,f('#'));//0壓入棧 Initstack(&OPND); c=getchar(); if(c==ch[2]||c==ch[3]||c==ch[5]||c==ch[6])//先對+和-的情況忽略和左括弧的情況 { printf("錯誤1 \n"); k=0; return 0; } if(c==ch[0]) c=getchar();//如果是+,把它覆蓋 if(c==ch[1]) { j=0; c=getchar();//也把-號覆蓋 } while(c!='#'||ch[Gettop(OPTR)]!='#') { if(isdigit(c)) { sum=0; while(isdigit(c)) { if(!j) { sum=sum*10-(c-'0');//實現了數字串前面有負號(之前是:sum=-(sum*10)-(c-'0')結果是-12+13=21) } else sum=sum*10+(c-'0'); c=getchar(); } Push(&OPND,sum);//如果還是數字先不壓棧,把數字串轉化成十進制數字再壓棧 j=1; } else if(k) { switch(precede(ch[Gettop(OPTR)],c)) { case'<': Push(&OPTR,f(c));//把它們整型化 c=getchar(); if(c==ch[0]||c==ch[1]||c==ch[2]||c==ch[3]||c==ch[5]||c=='\n')//要除去下個是『(』的情況 也把以運算符歸到這里來 { printf("出錯2\n"); k=0; return 0;//加了開關變數和返回0的值使程序更以操作 } break; case'=': Pop(&OPTR,&x); c=getchar(); if(c==ch[0]||c==ch[1]||c==ch[2]||c==ch[3]||c==ch[5]||c=='\n')//把ch[6]的情況也忽略了但此時並沒有注意到右括弧後面右運算符的情況 { printf("出錯2\n"); k=0; return 0; } break; case'>': Pop(&OPTR,&theta); Pop(&OPND,&b); Pop(&OPND,&a);//注意這里是誰先出棧 Push(&OPND,Operate(a,theta,b)); break; } } }//在這里判斷是否以運算符結束是不對的 return(Gettop(OPND)); } main() { int result; printf("輸入你的算術表達式:\n"); result=EvaluateExpression(); printf("結果是 :%d\n",result); return 0; } : 本計算器利用堆棧來實現。 1、定義後綴式計算器的堆棧結構 因為需要存儲的單元不多,這里使用順序棧,即用一維數組來模擬堆棧: #define MAX 100 int stack[MAX]; int top=0; 因此程序中定義了長度為MAX的一維數組,這里MAX用宏定義為常數100,我們可以修改宏定義而重新定義堆棧的大小。 整型數據top為棧頂指示,由於程序開始時堆棧中並無任何數據元素,因此top被初始化為0。 2、存儲後綴式計算器的運算數 我們定義了堆棧stack[MAX]後,就可以利用入棧操作存儲先後輸入的兩個運算數。 下面看一下是如何實現的: int push(int i) /*存儲運算數,入棧操作*/ { if(top<MAX) { stack[++top]=i; /*堆棧仍有空間,棧頂指示上移一個位置*/ return 0; } else /*堆棧已滿,給出錯誤信息,返回出錯指示*/ { printf("The stack is full"); return ERR; } } 我們在調用函數push時,如果它的返回值為0,說明入棧操作成功;否則,若返回值為ERR(在程序中說明為-1),說明入棧操作失敗。 3、從堆棧中取出運算數 當程序中讀完了四則運算符後,我們就可以從堆棧中取出已經存入的兩個運算數,構成表達式,計算出結果。取出運算數的函數採用的正是出棧演算法。在本例中,實現該演算法的函數 為pop(): int pop(); /*取出運算數,出棧操作*/ { int var; /*定義待返回的棧頂元素*/ if(top!=NULL) /*堆棧中仍有數據元素*/ { var=stack[top--]; /*堆棧指示下移一個位置*/ return var; } else /*堆棧為空,給出錯誤信息,並返回出錯返回值*/ printf("The stack is cmpty!\n"); return ERR; } 同樣,如果堆棧不為空,pop()函數返回堆棧頂端的數據元素,否則,給出棧空提示,並返回錯誤返回值ERR。 4、設計完整的後綴式計算器 有了堆棧存儲運算數,後綴式計算器的設計就很簡單了。程序首先提示用戶輸入第一個運算數,調用push()函數存入堆棧中;而後提示用戶輸入第二個運算數,同樣調用push()函數存入堆棧中。接下來,程序提示用戶輸入+,-,*,/四種運算符的一種,程序通過switch_case結構判斷輸入運算符的種類,轉而執行不同的處理代碼。以除法為例,說明程序的執行流程: case '/': b=pop(); a=pop(); c=a/b; printf("\n\nThe result is %d\n",c); printf("\n"); break; 程序判斷用戶輸入的是除號後,就執行上述代碼。首先接連兩次調用pop()函數從堆棧中讀出先前輸入的運算數,存入整型數a和b中;然後執行除法運算,結果存入單元c中。這時需要考慮究竟誰是被除數,誰是除數。由於開始我們先將被除數入棧,根據堆棧「先進後出」的原則,被除數應該是第二次調用pop()函數得到的返回值。而除數則是第一次調用pop()函數得到的返回值。 最後程序列印出運算結果,並示提示用戶是否繼續運行程序: printf("\t Continue?(y/n):"); l=getche(); if(l=='n') exit(0); 如果用戶回答是"n",那麼結束程序,否則繼續循環。 完整的程序代碼如下: #include<stdio.h> #include<conio.h> #include<stdlib.h> #define ERR -1 #define MAX 100 /*定義堆棧的大小*/ int stack[MAX]; /*用一維數組定義堆棧*/ int top=0; /*定義堆棧指示*/ int push(int i) /*存儲運算數,入棧操作*/ { if(top<MAX) { stack[++top]=i; /*堆棧仍有空間,棧頂指示上移一個位置*/ return 0; } else { printf("The stack is full"); return ERR; } } int pop() /*取出運算數,出棧操作*/ { int var; /*定義待返回的棧頂元素*/ if(top!=NULL) /*堆棧中仍有元素*/ { var=stack[top--]; /*堆棧指示下移一個位置*/ return var; /*返回棧頂元素*/ } else printf("The stack is empty!\n"); return ERR; } void main() { int m,n; char l; int a,b,c; int k; do{ printf("\tAriothmatic Operate simulator\n"); /*給出提示信息*/ printf("\n\tPlease input first number:"); /*輸入第一個運算數*/ scanf("%d",&m); push(m); /*第一個運算數入棧*/ printf("\n\tPlease input second number:"); /*輸入第二個運算數*/ scanf("%d",&n); push(n); /*第二個運算數入棧*/ printf("\n\tChoose operator(+/-/*//):"); l=getche(); /*輸入運算符*/ switch(l) /*判斷運算符,轉而執行相應代碼*/ { case '+': b=pop(); a=pop(); c=a+b; printf("\n\n\tThe result is %d\n",c); printf("\n"); break; case '-': b=pop(); a=pop(); c=a-b; printf("\n\n\tThe result is %d\n",c); printf("\n"); break; case '*': b=pop(); a=pop(); c=a*b; printf("\n\n\tThe result is %d\n",c); printf("\n"); break; case '/': b=pop(); a=pop(); c=a/b; printf("\n\n\tThe result is %d\n",c); printf("\n"); break; } printf("\tContinue?(y/n):"); /*提示用戶是否結束程序*/ l=getche(); if(l=='n') exit(0); }while(1); } : #include <stdio.h> #include <conio.h> #include <malloc.h> #include <stdlib.h> #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 typedef int Status; #define STACK_INIT_SIZE 100 //初始分配量 #define STACKINCREMENT 10 //存儲空間的分配增量 typedef char ElemType; typedef ElemType OperandType; //操作數 typedef char OperatorType; typedef struct { ElemType *base; ElemType *top; int stacksize; }SqStack; Status InitStack(SqStack &S) { //構造一個空棧S S.base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType)); if(!S.base) exit (OVERFLOW); S.top = S.base; S.stacksize = STACK_INIT_SIZE; return OK; } Status GetTop(SqStack S){ ElemType e; if (S.top == S.base) return ERROR; e = *(S.top-1); return e; } Status Push (SqStack &S,ElemType e) { //插入元素e為新的棧頂元素 if (S.top - S.base >= S.stacksize){ S.base = (ElemType *) realloc ( S.base, (S.stacksize + STACKINCREMENT) * sizeof(ElemType)); if(!S.base) exit (OVERFLOW); S.top = S.base + S.stacksize; S.stacksize += STACKINCREMENT; } *S.top++ = e; return OK; } Status Pop (SqStack &S,ElemType &e){ //若棧不空,則刪除S的棧頂元素,用e返回其值,並返回OK;否則返回ERROR if(S.top == S.base) return ERROR; e = * --S.top; return OK; } char In(char c,char OP[]) { if(c>=35 && c<=47) return 1; else return 0; } char OP[8]=; int m[7][7]={1,1,2,2,2,1,1, 1,1,2,2,2,1,1, 1,1,1,1,2,1,1, 1,1,1,1,2,1,1, 2,2,2,2,2,0,-1, 1,1,1,1,-1,1,1, 2,2,2,2,2,-1,0};//1 > 2 < 0 = -1 不存在 char Precede(char i,char j) { int a,b; char *p; for(p=OP,a=0;*p!='\0';p++,a++) if(*p==i) break; for(p=OP,b=0;*p!='\0';p++,b++) if(*p==j) break; if(m[a][b]==1) return '>'; else if(m[a][b]==2) return '<'; else if(m[a][b]==0) return '='; else return 'O'; } char Operate(char a,char theta,char b) { if(a>47) a=atoi(&a); if(b>47) b=atoi(&b); switch(theta) { case '+': return a+b; break; case '-': return a-b; break; case '*': return a*b; break; case '/': return a/b; break; } } OperandType EvaluateExpression() { SqStack OPTR,OPND; OperandType a,b,c; OperatorType theta; InitStack(OPTR); Push(OPTR,'#'); InitStack(OPND); c=getchar(); while (c!='#' || GetTop(OPTR)!='#') { if (!In(c,OP)) else switch(Precede(GetTop(OPTR),c)) { case '<' : Push(OPTR,c); c = getchar(); break; case '=' : Pop(OPTR,c); c = getchar(); break; case '>' : Pop(OPTR,theta); Pop(OPND,b); Pop(OPND,a); Push(OPND,Operate(a,theta,b)); break; } } return GetTop(OPND); } void main() { printf("(以#為結束符)\n"); printf("請輸入:\n"); int a; a=(int)EvaluateExpression(); printf("%d",a); getch(); } : ls都正確 : C++ In Action這本書裡面有表達式求值的詳細項目分析. : 數據結構的書裡面都有的,仔細看一下 : studyall123的只能對0到9的數字運算才有效,對於10以上的數字就不行!不知道有沒有更好的方法! : 現在的人,連google一下都懶啊 : 實際上是按照逆波蘭式的順序讓輸入的表達式入棧,再根據運算符優先順序來計算。 : lenrning!
❺ python中向一維數組添加元素的方法
供參考:
old_array=['','']
new_array=['magnet:?xt=urn:btih:'+iforiinold_array]
print(new_array)
❻ python數組求和
在數組和矩陣中使用sum: 對數組b和矩陣c,代碼b.sum(),np.sum(b),c.sum(),np.sum(c)都能將b、c中的所有元素求和並返回單個數值。
但是對於二維數組b,代碼b.sum(axis=0)指定對數組b對每列求和,b.sum(axis=1)是對每行求和,返回的都是一維數組(維度降了一維)。
而對應矩陣c,c.sum(axis=0)和c.sum(axis=1)也能實現對列和行的求和,但是返回結果仍是二維矩陣。
# 定義函數,arr 為數組,n 為數組長度,可作為備用參數,這里沒有用到。
def_sum(arr,n):
# 使用內置的 sum 函數計算。
return(sum(arr))
# 調用函數
arr=[]
# 數組元素
arr=[12,3,4,15]
# 計算數組元素的長度
n=len(arr)
ans=_sum(arr,n)
# 輸出結果
print('數組元素之和為',ans)
(6)python一維數組定義擴展閱讀:
python數組使用:
python 數組支持所有list操作,包括 .pop、.insert 和 .extend。另外,數組還提供從文件,讀取和存入文件的更快的方法,列如如 .frombytes 和 .tofile,如下所示我們定義一個數組。
from array import arrayarr=array('d',(a for a in range(5)))print(arr)。
arr=array('d',(a for a in range(5)))從這個代碼中可以看出,一個數組的定義需要傳入的不只是值還有類型。
可以是(must be c, b, B, u, h, H, i, I, l, L, f or d)。
❼ python 怎麼把字典的值變為一維數組
一、創建字典
字典由鍵和對應值成對組成。字典也被稱作關聯數組或哈希表。基本語法如下:
復制代碼代碼如下:
dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}
也可如此創建字典:
復制代碼代碼如下:
dict1 = { 'abc': 456 };
dict2 = { 'abc': 123, 98.6: 37 };
注意:
每個鍵與值用冒號隔開(:),每對用逗號,每對用逗號
❽ 什麼是數組的維度,python 的ndim的使用
數組的維度就是一個數組中的某個元素,當用數組下標表示的時候,需要用幾個數字來表示才能唯一確定這個元素,這個數組就是幾維。numpy中直接用 * 即可表示數與向量的乘法,參考python 2.7的一個例子:inport numpy as np a = np.array([1,2,3,4]) # 向量 b = 5 # 數 print a*b ++++++++++++ [5,10,15,20]
❾ python如何定義數組
Python數組還有一個變態的使用方法,就是調用時可以不按參數順序,對於我們掌握怎樣正確創建Python數組是很有幫助的,而且也可從中學到不少編程技巧,例如委託和模板方法。希望大家一起研究下。在ubuntu中,更加是必須的一種腳本引擎,所以有必要去學習一下,這里的文章只針對有一定編程基礎,最好是比較熟悉php或javascript的用戶,如果沒任何基礎的新手建議找更詳細的教程去學習。Python數組的變數是不需要定義的,這方面和php一樣,它比javascript還是寬松,不過它是用縮進作為段落標識的,作為習慣了C語言風格語法的人,可能一開始會很不習慣使用。但細一想,其實也是很正常,很合理的。雖然Python在面向過程/面向對象方面也是很寬松,但實際上一般的程序都是一個主入口。然後不斷調用其它類庫或函數,所以用縮進的方式並無不妥,那樣一方面要求用戶寫代碼時要規范,另一方面反向省去了多餘的{}。與C語言風格相比,Python主要語法特點而下:變數、字元串在python中,所有變數都是對象,數組其實是一個鏈表,並且可以進行相應的鏈表操作。對於普通數據類型,定義/賦值方法都是一樣的,這里不作介紹,python的字元串方面有些特別,這里介紹一下。python對字元串用 [']["] 括起含義是一樣的,同樣對特殊字元使用 [\] 進行轉義不過它有一個很特別的語法就是:[''']三引號,它用於括起分多行的字元串,實際是這也可以作為它的多行註解,如:#!/usr/bin/python #python source class python: def Hello(self): print 'Hello' def count(n): in=0 while(in<=n): inin=in+1 print in //buile by G++ or VC++ //C++ Source #include <iostream> int main() { class python { public: void Hello(void) { cout<<"Hello"<<endl; } void count(int n) { int in=0; while(in<=n) { inin=in+1; cout<<in<<endl; } } }; return 0; } python數組實際不是數組,而是一個list對象,如果要參考它的用法,可以參考這個對象的方法。需要注意的是,python數組實際是一個鏈表,因此定義後不能像php之類語言一樣,直接在後面追加元素,而是需要用操作鏈表的方法操作。在上述例子中:如果用 arr[2] = 'ccccc' 可以改變第三個元素的值,但如果用 arr[3] = 'dddd' 增加一個元素是會指錯的,應該用:arr.append('ddddd') 或 arr.insert(任意位置, 'dddd') 增加元素。對於多維數組,定義方式為: arr = [[]] * 3 它定義的是:[[], [], []],也可以用 arr = [[] for i in range(3)] 對於數組和字元串等常用操作,後面會有一章專門介紹,這里就不在列舉更多的使用方法。python數組實際不是數組,而是一個list對象,如果要參考它的用法,可以參考這個對象的方法。需要注意的是,python數組實際是一個鏈表,因此定義後不能像php之類語言一樣,直接在後面追加元素,而是需要用操作鏈表的方法操作。在上述例子中:如果用 arr[2] = 'ccccc' 可以改變第三個元素的值,但如果用 arr[3] = 'dddd' 增加一個元素是會指錯的,應該用:arr.append('ddddd') 或 arr.insert(任意位置, 'dddd') 增加元素。對於多維數組,定義方式為: arr = [[]] * 3 它定義的是:[[], [], []],也可以用 arr = [[] for i in range(3)] 對於數組和字元串等常用操作,後面會有一章專門介紹,這里就不在列舉更多的使用方法。
❿ python 中Data[1][0]/100是什麼意思
將Data中第2行的第一個值除以100