因?yàn)閒or迭代是按索引進(jìn)行的,第一次迭代返回的是x[0],并會(huì)記錄下次迭代的索引位置1。
成都創(chuàng)新互聯(lián)專注于臨潁企業(yè)網(wǎng)站建設(shè),自適應(yīng)網(wǎng)站建設(shè),商城系統(tǒng)網(wǎng)站開發(fā)。臨潁網(wǎng)站建設(shè)公司,為臨潁等地區(qū)提供建站服務(wù)。全流程按需制作,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
而x.remove(0)刪除的是列表的第一個(gè)元素0,刪除后列表會(huì)移動(dòng)元素,用1覆蓋0,用2覆蓋1,...,所以現(xiàn)在的x是[1,2,3,...,19],而下一次迭代將返回索引1處的元素2,并記錄下次迭代的索引位置2。
所以,這次刪除的就是元素2,刪除后的列表x就是[1,3,4,...,19]。
這樣,下次將返回并刪除索引2處的4。
所以,像這樣一邊迭代一邊在原列表上刪除的結(jié)果就只留下了所有奇數(shù)元素。
python沒有數(shù)組,可以用list代替.
隨機(jī)元素的范圍你沒有說,我用1-100代替.代碼如下:
import random
def randomlist():
listname = []
for i in range(10):
listname.append(random.randint(1,100))
return listname
list1,list2,list3= randomlist(),randomlist(),randomlist()
print list1,list2,list3
#生成三個(gè)有十個(gè)元素的數(shù)組完成
totallist = list1[:]
totallist.extend(list2)
totallist.extend(list3)
#合并成一個(gè)數(shù)組完成
print totallist
jishu,oushu = [],[]
for i in totallist:
if i%2 == 1 and i not in jishu:
jishu.append(i)
elif i%2 == 0 and i not in oushu:
oushu.append(i)
#挑出奇數(shù)和偶數(shù)完成
jishu.sort()
oushu.sort()
#將奇數(shù)和偶數(shù)列表排序,不需要可以刪除
print jishu,oushu
注:生成三個(gè)有十個(gè)元素的數(shù)組,可以用以下一行代碼就能實(shí)現(xiàn),代碼更少,運(yùn)行效率也更高,不過C\JAVA里面都沒有這種形式,不容易看懂
list1,list2,list3 = ([random.randint(1,100) for i in range(10)] for i in range(3))
filter()函數(shù)是 Python 內(nèi)置的另一個(gè)有用的高階函數(shù),filter()函數(shù)接收一個(gè)函數(shù) f 和一個(gè)list,這個(gè)函數(shù) f 的作用是對(duì)每個(gè)元素進(jìn)行判斷,返回 True或 False,filter()根據(jù)判斷結(jié)果自動(dòng)過濾掉不符合條件的元素,返回由符合條件元素組成的新list。
例如,要從一個(gè)list [1, 4, 6, 7, 9, 12, 17]中刪除偶數(shù),保留奇數(shù),首先,要編寫一個(gè)判斷奇數(shù)的函數(shù):
def is_odd(x):
return x % 2 == 1
然后,利用filter()過濾掉偶數(shù):
filter(is_odd, [1, 4, 6, 7, 9, 12, 17])
結(jié)果:
[1, 7, 9, 17]
利用filter(),可以完成很多有用的功能,例如,刪除 None 或者空字符串:
def is_not_empty(s):
return s and len(s.strip()) 0
filter(is_not_empty, ['test', None, '', 'str', ' ', 'END'])
結(jié)果:
['test', 'str', 'END']
注意: s.strip(rm) 刪除 s 字符串中開頭、結(jié)尾處的 rm 序列的字符。
當(dāng)rm為空時(shí),默認(rèn)刪除空白符(包括'\n', '\r', '\t', ' '),如下:
a = ' 123'
a.strip()
'123'
a = '\t\t123\r\n'
a.strip()
'123'
練習(xí):
請(qǐng)利用filter()過濾出1~100中平方根是整數(shù)的數(shù),即結(jié)果應(yīng)該是:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
方法:
import math
def is_sqr(x):
return math.sqrt(x) % 1 == 0
print filter(is_sqr, range(1, 101))
結(jié)果:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]