主题
列表
列表索引的负数表示法
L[-1] = L[len(L) - 1]
列表添加元素的4种方法
- L1.append(element)
- L1 = L1 + L2
- L1.extend(L2)
- L1.insert(index, element)
列表不常用的一些方法
- L1.count(element)返回元素出现的次数
- L1.index(element)返回元素第一次出现的位置
- L1.remove(element) 和 del L1[index] 都是删除第一次出现的某个元素
- L1.pop(index)弹出某个元素,index默认值是len(L1)
查找集合中重复元素的个数
方法1
python
from collections import Counter
print (Counter([1,2,2,2,2,3,3,3,4,4,4,4]))
Counter({2: 4, 4: 4, 3: 3, 1: 1})
方法2
python
List=[1,2,2,2,2,3,3,3,4,4,4,4]
a = {}
for i in List:
... if List.count(i)>1:
... a[i] = List.count(i)
... print (a)
...
{}
{2: 4}
{2: 4}
{2: 4}
{2: 4}
{2: 4, 3: 3}
{2: 4, 3: 3}
{2: 4, 3: 3}
{2: 4, 3: 3, 4: 4}
{2: 4, 3: 3, 4: 4}
{2: 4, 3: 3, 4: 4}
{2: 4, 3: 3, 4: 4}
方法3
python
mylist = [1,2,2,2,2,3,3,3,4,4,4,4]
myset = set(mylist)
for item in myset:
...print("the %d has found %d" %(item,mylist.count(item)))
...
the 1 has found 1
the 2 has found 4
the 3 has found 3
the 4 has found 4
List to string
python
test = [47,114,101,100,112,97,99,107,101,116,47,98,0,0,0,0,0,0,0,0,47,115,116,97,116,105,115,116,105,99,115,82,101,100,80,97,99,107,101,116,66,97,108,97,110,99,101]
print "".join(map(chr, test))
输出 :/redpacket/b/statisticsRedPacketBalance
去重
python
>>> list = [11,12,13,12,14]
>>> a = set(list)
>>> print a
set([11, 12, 13, 14])
>>> >>> [x for x in a]
[11, 12, 13, 14]
合并
两个列表[1,5,7,9]和[2,2,6,8]合并为[1,2,2,3,6,7,8,9]
extend可以将另一个集合中的元素逐一添加到列表中,区别于append整体添加
python
list1 = [1,5,7,9]
list2 = [2,2,6,8]
list1.extend(list2)
list1.sort(reverse=False)
print list1
[[1,2],[3,4],[5,6]]一行代码展开该列表,得出[1,2,3,4,5,6]
方法1:
python
a = [[1,2],[3,4],[5,6]]
result = [j for i in a for j in I]
方法2:
python
import numpy as np
a = [[1,2],[3,4],[5,6]]
print np.array(a).flatten().tolist()
分组
每2个元素为1组
python
result = [result[i:i + 2] for i in range(0, len(result), 2)]
查找
列表[1,2,3,4,5],请使用map()函数输出[1,4,9,16,25],并使用列表推导式提取出大于10的数,最终输出[16,25]
python
list = [1,2,3,4,5]
def fn(x):
return x**2
res = map(fn,list)
print [ i for i in res if i > 10]
filter
filter方法求出列表所有奇数并构造新列表,a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,
然后返回 True 或 False,最后将返回 True 的元素放到新列表
python
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
def fn(a):
return a% 2 == 1
newlist = filter(fn,a)
print [i for i in newlist]
输出: [1, 3, 5, 7, 9]
列表推导式
列表推导式求列表所有奇数并构造新列表,a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
python
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print [i for i in a if i % 2 == 1]
输出: [1, 3, 5, 7, 9]
列表计算
[1,2,3]+[4,5,6]的结果是多少
python
a = [1, 2, 3]
b = [4, 5, 6]
print a + b
输出:[1, 2, 3, 4, 5, 6]
排序
list=[2,3,5,4,9,6],从小到大排序,不许用sort,输出[2,3,4,5,6,9]
python
list=[2,3,5,4,9,6]
new_list = []
def get_min(list):
a = min(list)
list.remove(a)
new_list.append(a)
if len(list) > 0:
get_min(list)
return new_list
print get_min(list)
举例sort和sorted对列表排序,list=[0,-1,3,-10,5,9]
python
list=[0,-1,3,-10,5,9]
list.sort(reverse=False)
print "list.sort在list基础上修改,无返回值",list
list=[0,-1,3,-10,5,9]
res = sorted(list,reverse=False)
print "sorted有返回值是新的list",list
print "返回值",res
>>>
list.sort在list基础上修改,无返回值 [-10, -1, 0, 3, 5, 9]
sorted有返回值是新的list [0, -1, 3, -10, 5, 9]
返回值 [-10, -1, 0, 3, 5, 9]
对list排序foo = [-5,8,0,4,9,-4,-20,-2,8,2,-4],使用lambda函数从小到大排序
python
foo = [-5,8,0,4,9,-4,-20,-2,8,2,-4]
print sorted(foo,key=lambda x:x)
>>>
[-20, -5, -4, -4, -2, 0, 2, 4, 8, 8, 9]
对list排序foo = [-5,8,0,4,9,-4,-20,-2,8,2,-4],
使用lambda函数从小到大排序,[0,2,4,8,8,9,-2,-4,-4,-5,-20],
正数从小到大,负数从大到小
python
foo = [-5,8,0,4,9,-4,-20,-2,8,2,-4]
print sorted(foo,key=lambda x:(x < 0,abs(x)))
列表嵌套字典的排序,分别根据年龄和姓名排序
python
foo = [{"name":"zs","age":19},{"name":"ll","age":54},
{"name":"wa","age":17},{"name":"df","age":23}]
print sorted(foo,key=lambda x:x['age'],reverse=True)
print sorted(foo,key=lambda x:x['name'])
\>>>
[{'age': 54, 'name': 'll'}, {'age': 23, 'name': 'df'},
{'age': 19, 'name': 'zs'}, {'age': 17, 'name': 'wa'}]
[{'age': 23, 'name': 'df'}, {'age': 54, 'name': 'll'},
{'age': 17, 'name': 'wa'}, {'age': 19, 'name': 'zs'}]
列表嵌套元组,分别按字母和数字排序
python
foo = [("zs", 19), ("ll", 54),
("wa", 17), ("df", 23)]
print sorted(foo, key=lambda x: x[1], reverse=True)
print sorted(foo, key=lambda x: x[0])
>>>
[('ll', 54), ('df', 23), ('zs', 19), ('wa', 17)]
[('df', 23), ('ll', 54), ('wa', 17), ('zs', 19)]
列表嵌套列表排序,年龄数字相同,按字母排序
python
foo = [["zs", 19], ["ll", 54],
["wa", 17], ["df", 23],["xf", 23]]
print sorted(foo, key=lambda x: (x[1],x[0]))
print sorted(foo, key=lambda x: x[0])
\>>>
[['wa', 17], ['zs', 19], ['df', 23], ['xf', 23], ['ll', 54]]
[['df', 23], ['ll', 54], ['wa', 17], ['xf', 23], ['zs', 19]]
生成器
请将[i for i in range(3)]改成生成器
生成器是特殊的迭代器,
1、列表表达式的【】改为()即可变成生成器
2、函数在返回值得时候出现yield就变成生成器,而不是函数了;
中括号换成小括号即可
python
>>> a = (i for i in range(3))
>>> type(a)
<type 'generator'>
列表操作
过滤.NEF和.JPG文件,并匹配是否一致
python
nef_list_origin = filter(lambda x: x.find(".NEF") > 0, filenames)
nef_list = [item.split(".")[0] for item in nef_list_origin]
jpg_list_origin = filter(lambda x: x.find(".JPG") > 0, filenames)
jpg_list = [item.split(".")[0] for item in jpg_list_origin]
# print(nef_list)
# print(jpg_list)
temp = set(nef_list).difference(set(jpg_list))
if len(temp) == 0:
print("dir path >> ",dirpath)
for jpg_name in list(filter(lambda x: x.find(".JPG") > 0, filenames)):
jpg_path = os.path.sep.join([dirpath,jpg_name])
if os.path.exists(jpg_path):
print("delete >>",jpg_path)
> filter(function, list)
>
> list1.difference(list2)