Skip to content

列表

列表索引的负数表示法

L[-1] = L[len(L) - 1]

列表添加元素的4种方法

  1. L1.append(element)
  2. L1 = L1 + L2
  3. L1.extend(L2)
  4. 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)