切换风格

Wizard Sky California Sunset glow Black Cloud Beige Dragon Lavender NewYear City Snow Flowers London
收藏本站XSS平台字符串转换jsfuck
【Love Python】【05】打通任督二脉之基本数据结构(列表)[复制链接]
发表于 2014-4-10 21:17:32 | 显示全部楼层 |!read_mode!
列表的一些特性:
1 列表是有序的集合

2 通过偏移来索引,从而读取数据
>>> a = [1,2,3]
>>> a[-1]
3

3 支持嵌套
>>> a = [[1,2,3],[4,5,6]]
>>> a
[[1, 2, 3], [4, 5, 6]]
>>> 

4 可变的类型
>>> a
[[1, 2, 3], [4, 5, 6]]
>>> a[0][1] = 8
>>> a
[[1, 8, 3], [4, 5, 6]]
>>> 

操作列表:
1 切片:
正向索引(从左往右)

>>> a = [1,2,3,4,5,6,7]
>>> a[0:4:1]    #从0下标开始截取到4,步长为1
[1, 2, 3, 4]
>>> a[0:4:2]    #从0下标开始截取到4,步长为2
[1, 3]
>>> 

反向索引(从右往左)
>>> a[-1:-4:-1]
[7, 6, 5]
>>> 

默认索引
>>> a[1:]
[2, 3, 4, 5, 6, 7]
>>> a[1::2]
[2, 4, 6]
>>> 

2添加:
+ 生成一个新的列表
>>> a
[1, 2, 3, 4, 5, 6, 7]
>>> b = [192,1,9]
>>> a + b
[1, 2, 3, 4, 5, 6, 7, 192, 1, 9]
>>> 

Extend  接受参数并将该参数的每个元素都添加到原有的列表中,原地修改列表而不是新建列表
>>> a
[1, 2, 3, 4, 5, 6, 7]
>>> b
[192, 1, 9]
>>> id(a)
4495024496
>>> a.extend(b)
>>> a
[1, 2, 3, 4, 5, 6, 7, 192, 1, 9]
>>> id(a)
4495024496
>>> 

Append :追加任意对象到列表的末端
>>> a = [1,2,3]
>>> a.append(4)
>>> a
[1, 2, 3, 4]
>>> a.append(5,6)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: append() takes exactly one argument (2 given)
>>> 


Insert: 插入任意对象到列表中,可以控制插入位置。
>>> a
[1, 2, 3, 4]
>>> a.insert(2,'ab')
>>> a
[1, 2, 'ab', 3, 4]
>>> 

3 修改:
修改列表本身只需要直接赋值操作就行。
>>> a
[1, 2, 'ab', 3, 4]
>>> a[2] = 'python@t00ls.net'
>>> a
[1, 2, 'python@t00ls.net', 3, 4]
>>> 

4 删除:
Del :通过索引删除指定位置的元素。
>>> a
[1, 2, 'python@t00ls.net', 3, 4]
>>> del a[0]
>>> a
[2, 'python@t00ls.net', 3, 4]
>>> 

Remove:移除列表中指定值的第一个匹配值。如果没找到的话,会抛异常。
>>> a
[2, 'python@t00ls.net', 3, 4]
>>> a.remove(4)
>>> a
[2, 'python@t00ls.net', 3]
>>> a.remove(4)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list
>>>


Pop:返回最后一个元素,并从list中删除它。
>>> a
[2, 'python@t00ls.net', 3]
>>> a.pop()
3
>>> a
[2, 'python@t00ls.net']
>>> 

5 成员关系:
In 或 not in我们可以判断一个元素是否在列表里。
返回一个bool类型,元素在列表里返回true,否则返回fasle.

>>> 2 in a
True
>>> 2 not in a
False
>>> 

6 列表推导式:
[expr for iter_var in iterable] 
首先迭代iterable里所有内容,每一次迭代,都把iterable里相应内容放到iter_var中,再在表达式中应用该iter_var的内容,最后用表达式的计算值生成一个列表。
比如要生成一个包含1到10的列表,有如下两种方式
>>> [x for x in range(1,11)]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> range(1,11)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> 


[expr for iter_var in iterable if cond_expr]
加入判断语句,只有满足条件的内容才把iterable里相应内容放到iter_var中,再在表达式中应用该iter_var的内容,最后用表达式的计算值生成一个列表。

比如要生成包含1到10的所有奇数列表,有如下两种方式
>>> [x for x in range(1,11) if x % 2 == 1]
[1, 3, 5, 7, 9]
>>> range(1,11,2)
[1, 3, 5, 7, 9]
>>> 

7,排序翻转:sort,reverse
sort从小到大排列列表,直接修改原列表。他的返回值为none,所以
>>> a
[2, 1, 36, 7, 8]
>>> a.sort()
>>> a
[1, 2, 7, 8, 36]
>>> b = a.sort()
>>> type(b)
<type 'NoneType'>
>>> 


list的reverse函数:反转一个list, 他的返回值为none
>>> a
[1, 2, 7, 8, 36]
>>> a.reverse()
>>> a
[36, 8, 7, 2, 1]
>>> c = a.sort()
>>> type(c)
<type 'NoneType'>

8,内置list方法(返回一个列表,参数是可迭代对象。里面输出的内容还是保持了传入的可迭代对象的元素和顺序。如果参数为空,则返回一个空的列表。)
>>> a = 'abcdefg'            #字符串可迭代
>>> list(a)
['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> list( (1,2,3) )                #元组可迭代
[1, 2, 3]
>>> list(33)                    #整数不可迭代
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
>>> 

还在为怎么能写出大牛们那样牛逼哄哄的工具而发愁吗?还在为挖到洞而写不出批量的exp而苦恼吗?只要在坚持一步,只需一步,打通任督二脉以后的路就不再摸不着头脑,静下心来深入进去不要围观,总有一天你也会成功逆袭!

依旧俩小题:
(一)
a = [1,99,33,44,55,22]
输出结果:
1:[1,2,99,33,44,55,22,(11,33,54)]
2:  [1,2,99,33,101,44,55,22]

(二)
用列表推导式生成100内的大于20的偶数


友情提示本文档为连载系列:) 抚菊深思@t00ls.net  店小二@psacms.com


操千曲而后晓声,观千剑而后识器。
发表于 2014-4-11 15:17:46 | 显示全部楼层
第一小题
第一部分
a = [1,99,33,44,55,22]
b=(11,33,54)
c=a.append(b)
print c
第二部分
d=a.append(101)
print d

第二题
a=[i for i in xrange(21,100) if i/2==0]
print a

发表于 2014-4-13 21:36:52 | 显示全部楼层
不错 希望坚持下去

代码区

GMT+8, 2019-11-23 08:05

Powered by Discuz! X2

© 2001-2018 Comsenz Inc.

回顶部