# range(start,end,step)函数:(生成可迭代序列,Iterable)
range(20,3**5,10)表示起始为20,终止为3的5次幂,步长为10
1. 对于遍历x,y的循环,经常要用到双重for嵌套。
这时候使用comprehension写法,加入xrange,则更简洁
print [表达式(x,y) for x in xrange(a) for y in xrange(x)]
这里x会遍历a,而y则会遍历x-1,这就是双重for循环的解法。
2. 如果使用小括号()来代替上式中的[],那么就返回一个生成器对象,而不是一个tuple(即,不可修改的列表)。因为tuple使用的很少。而使用for循环构建列表,我们经常遇到列表超级大,还没干别的内存就占用满了的时候。
如果使用小括号括住,内存中只会载入这个列表中的一个元素。
print (表达式(x,y) for x in xrange(a) for y in xrange(x))
此时不会显示list的所有元素,而是只显示一个元素。你要想看所有元素,需要用for循环来一个个看。
3. 如果使用大括号{}来代替上式中的[],则就是构建set或者dict对象,跟大括号的实际意义相符。例如
print { 表达式(x) for x in a}
print { 表达式({x}, {y}) for x,y in enumerate(a)}
此时显示结果为
set([a1,a2,......])
{a1: b1, a2: b2,......}
都有list了,为啥要有set呢?
b=list(set(a))。
利用set里面元素无序而不重复的特性,去除列表a里面的重复元素。