因为for迭代是按索引进行的,第一次迭代返回的是x[0],并会记录下次迭代的索引位置1。
成都创新互联专注于临颍企业网站建设,自适应网站建设,商城系统网站开发。临颍网站建设公司,为临颍等地区提供建站服务。全流程按需制作,专业设计,全程项目跟踪,成都创新互联专业和态度为您提供的服务
而x.remove(0)删除的是列表的第一个元素0,删除后列表会移动元素,用1覆盖0,用2覆盖1,...,所以现在的x是[1,2,3,...,19],而下一次迭代将返回索引1处的元素2,并记录下次迭代的索引位置2。
所以,这次删除的就是元素2,删除后的列表x就是[1,3,4,...,19]。
这样,下次将返回并删除索引2处的4。
所以,像这样一边迭代一边在原列表上删除的结果就只留下了所有奇数元素。
python没有数组,可以用list代替.
随机元素的范围你没有说,我用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
#生成三个有十个元素的数组完成
totallist = list1[:]
totallist.extend(list2)
totallist.extend(list3)
#合并成一个数组完成
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)
#挑出奇数和偶数完成
jishu.sort()
oushu.sort()
#将奇数和偶数列表排序,不需要可以删除
print jishu,oushu
注:生成三个有十个元素的数组,可以用以下一行代码就能实现,代码更少,运行效率也更高,不过C\JAVA里面都没有这种形式,不容易看懂
list1,list2,list3 = ([random.randint(1,100) for i in range(10)] for i in range(3))
filter()函数是 Python 内置的另一个有用的高阶函数,filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。
例如,要从一个list [1, 4, 6, 7, 9, 12, 17]中删除偶数,保留奇数,首先,要编写一个判断奇数的函数:
def is_odd(x):
return x % 2 == 1
然后,利用filter()过滤掉偶数:
filter(is_odd, [1, 4, 6, 7, 9, 12, 17])
结果:
[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'])
结果:
['test', 'str', 'END']
注意: s.strip(rm) 删除 s 字符串中开头、结尾处的 rm 序列的字符。
当rm为空时,默认删除空白符(包括'\n', '\r', '\t', ' '),如下:
a = ' 123'
a.strip()
'123'
a = '\t\t123\r\n'
a.strip()
'123'
练习:
请利用filter()过滤出1~100中平方根是整数的数,即结果应该是:
[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))
结果:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]