python數組下標1
⑴ python中yield和return究竟有什麼區別,怎麼用
常看到別人使用或討論yield語法,能搜到的中文解釋卻不多,今天決心搞定yield,把暫時的理解貼到這里.
搞定yield之前: 疊代器(iterator)
發現yield: 生成器(constructor)
使用yield: 遞歸調用
1. iterator
疊代器最簡單例子應該是數組下標了,且看下面的c++代碼:
int array[10];
for ( int i = 0; i < 10; i++ )
printf("%d ", array[i]);
疊代器工作在一個容器里(array[10]),它按一定順序(i++)從容器里取出值(array[i])並進行操作(printf("%d ", array[i])。
上面的代碼翻譯成python:
array = [i for i in range(10)]
for i in array:
print i,
for i in array幹了什麼(別亂想)?首先,array作為一個list是個容器,其次list這個內建類型有默認的next行為,python發現這些之後采 取的秘密的沒被各位看到的動作是:拿出array這丫容器的疊代器,從裡面next一下把值給i供for循環主體處置,for把這個值print了。
現在的問題是數據可以做容器疊代,代碼可以嗎?
怎麼不行,碗碟可以用來放菜,wk們不就聯想出用nt盛嗎,當然我們的yield不會那麼yellow + bt
2. constructor
怎麼把函數變成constructor? 在函數體里有yield就行了!
def gen():
print 'enter'
yield 1
print 'next'
yield 2
print 'next again'
for i in gen():
print i
各位!python看到gen函數里出現yield,知道可以用next了,問題是怎麼對代碼這個容器玩next?
從容器里拿到iterator的時候它還什麼也不是,處在容器入口處,對於數組來說就是下標為-1的地方,對於函數來說就是函數入口嘛事沒干,但是萬事俱備就欠next。
開始for i in g,next讓itreator爬行到yield語句存在的地方並返回值,
再次next就再爬到下一個yield語句存在的地方並返回值,依次這樣直到函數返回(容器盡頭)。
您一定看出來上面代碼的輸出是:
enter
1
next
2
next again
如果沒看出來請不要往下看了免得反被yield搞定。
3. 使用yield
yield的代碼疊代能力不但能打斷函數執行還能記下斷點處的數據,下次next書接上回,這正是遞歸函數需要的。
例如中序遍歷二叉樹:
(應該是David Mertz寫的)
def inorder(t):
if t:
for x in inorder(t.left):
yield x
yield t.label
for x in inorder(t.right):
yield x
for n in inorder(tree)
print n
當然yield這種代碼next的能力還可以用在其它方面,發現拍案的在貼咯。
⑵ 請問什麼是Python的數組下標,下標是什麼意思,是不是還有一個上標
數組下標就是數組的索引,一般從0開始,到len(array)-1.
通過這個可以查看數組中特定位置的元素。
沒有上標之說。
⑶ python怎麼超過數組下標范圍了
你這個肯定是要超的。
比如 key input 'z' ,key =25
(eslzm.index(i)+1) +key 肯定 >25 ,那就超定了。
(eslzm.index(i)+key)%26 這樣就可以了
⑷ python如何獲取數組元素的下標並輸出
python獲取數組的下標並輸出的方法:
1、for循環函數可以遍歷數組的每一個元素,使用「for i in rang(0,len(數組名))」的方式可以得出數組所有元素的下標
2、然後輸出「i」就可以輸出數組的下標了
完整代碼如下:
執行結果如下:
更多Python知識,請關註:Python自學網!!
⑸ python 數組索引起始編號是0還是1
python的創始人(Guido van Rossum)說過,Python使用0-based索引方式的原因之一是Python的切片(slice)語法。 先看看切片的用法。可能最常見的用法就是「從數組中切出前n位」或「從數值這第i位起切出n位」(前一種實際上是i==起始位的特殊用法)。
⑹ python列表問題
-1是下標,負數表示是從數組末尾倒著數的。這樣你就應該明白了。
正著數,從0開始,倒著數,從-1開始。
⑺ python怎麼設置list的下標從1開始
因為在運行python腳本的時候你沒在後面添加一個值。sys.argv[1]意思是取位置第二的參數。位置第一的是py名字,第二的參數你沒有輸入,所以取不到,所以報錯out of range。
你執行的時候一般是這樣的:python xxx.py A 其中xxx是程序名字,即sys.argv[0]的位置。A是參數,即sys.argv[1]取的位置。必須有這個A才行,要不然sys.argv[1]取不到值肯定報錯
⑻ 用python 求一個數組中最大的三個元素及其所在位置
參考代碼如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace FindMaxWithIndex
{
/// <summary>
/// 有一個數組,每個元素的值都是實數,請寫出求最大元素的值及其位置的演算法
/// </summary>
class Program
{
static void Main(string[] args)
{
double[] Num = new[] { -8, 4543.9, 4543.9, 3, 45, 654.7, 7, 66, 35, 45, 4, 6, 4543.9, 5, 46, 54, 6, 43, 5.980, 34, 4543.9 };
//double[] Num = new [] { 1.0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
int[] index = SearchMaxWithIndex(Num);
Console.WriteLine("The max number is: {0}", Num[index[0]]);
Console.Write("The index of max number is:");
for (int i = 0; i < index.Length; i++)
{
if (index[i] == -1) break;
Console.Write(" '{0}'", index[i]);
}
Console.ReadKey();
}
private static int[] SearchMaxWithIndex(double[] arr)
{
int[] pos = new int[arr.Length]; //記錄最大值所在位置的數組
int position = 0; //初始設定數組的第1個元素為最大值
int j = 1;//j指示位置數組pos的下標
for (int i = 1; i < arr.Length; i++)
{
if (arr[i] > arr[position])
{
position = i; //記下新的最大值的位置
j = 1; //位置數組pos的下標恢復為1,下標為0的位置為position預留
}
else if (arr[i] == arr[position])
pos[j++] = i; //記下重復最大值的位置
}
pos[0] = position; //位置數組pos的下標為0的位置為position預留
if (j < arr.Length) pos[j] = -1; //-1為標識值,表示位置數組pos下標為0, 1, 2…(j-1)的位置存放的是最大值所在的位置
return pos;
}
}
}
⑼ python如何獲取某個數組中某些下標的元素
print(your_list.index('your_item')) ###your_list為列表名稱 your_item為需要修該的數據。
print [i for i, x in enumerate(your_list) if x == 'your_item']
your_list為待查list,your_item為具體要查的元素,列印出一個包含所有要查元素下標的列表。
【python列表】
1、可以先創建一個空列表,可以使用type(),查看類型。