1.遍历列表同时获取元素及下标
for item in List:
print(item)
这种方法可以直接循环取出列表的每一个元素,但是会有一个缺点,就是虽然取出了元素,但是不知道取出的元素所对应的下标是多少。
如果要取出元素,同时知道对应的下标,该怎么做呢?
可以使用如下方法:
方法1:
for i in range(len(List)):
print(i, List[i])
方法2:
for i, item in enumerate(List):
print(i, item)
对于方法2来说:
之前写完 enumerate,后来看了 Python cookbook,发现 enumerate 还可以带一个参数,之前在使用的过程当中,下标 index 默认是从 0,如果我们要从 1 ,或者其他的 index 开始,可以设置一个初始参数,如下:
items = ['a', 'b', 'c', 'd']
start = 2
for i, item in enumerate(items, start):
print(i, item)
输出结果:
2 a
3 b
4 c
5 d
2. 字典的遍历3种方法
2.1 keys()
# keys() 该方法会返回字典的所有的key
# 该方法会返回一个序列,序列中保存有字典的所有的键
hero_data = {'hero_name':'李元芳','age':29,'gender':'男'}
print(hero_data.keys())
print()
# 通过遍历keys()来获取所有的键
for k in hero_data.keys() :
print(k , hero_data[k])
输出结果:
dict_keys(['hero_name', 'age', 'gender'])
hero_name 李元芳
age 29
gender 男
2.2 values()
# 该方法会返回一个序列,序列中保存有字典的所有的值
hero_data = {'hero_name': '李元芳', 'age': 29, 'gender': '男'}
for v in hero_data.values():
print(v)
输出结果:
李元芳
29
男
2.3 items()
# 该方法会返回字典中所有的项
# 它会返回一个序列,序列中包含有双值子序列
# 双值分别是,字典中的key和value
hero_data = {'hero_name': '李元芳', 'age': 29, 'gender': '男'}
print(hero_data.items())
for k, v in hero_data.items():
print(k, '=', v)
输出结果:
dict_items([('hero_name', '李元芳'), ('age', 29), ('gender', '男')])
hero_name = 李元芳
age = 29
gender = 男
3.同时遍历两个list
需求是将两个list同时进行遍历,然后同步的将每个元素add到一个dict中,虽然有麻烦的方式,比如直接用list的数组下标可以实现,但是一点也不pythonic,于是想到了zip内置函数。
dict_1 = {}
list_1 = ['a', 'b', 'c']
list_2 = ['1', '2', '3']
""" zip打包用法,同时遍历两个list """
for symbol, digit in zip(list_1, list_2):
dict_1[symbol] = digit
print(dict_1)
输出结果:
{'a': '1', 'b': '2', 'c': '3'}
卧艹,简直比java实现该功能要简单的多得多。
ps: for循环里面遍历两个List或多个对象
for target in [1,2,3], [7,8,9]:
print(target)
for target in [1,2,3],["wang",8,"dan"],'f*ck':
print(target)
输出结果:
[1, 2, 3]
[7, 8, 9]
[1, 2, 3]
['wang', 8, 'dan']
f*ck
可见in后面当有多个对象的时候,会被组成一个tuple!!
每个target就是其中tuple中的一个元素哦。
4.list 和str类型的互相转换
4.1 str–>list
strl = '123456'
list1 = list(strl)
print('list直接转换', list1)
strl = '56 96爱 8'
list1 = list(strl)
print('list直接转换', list1)
# 看上面的转换结果,与预期有差别
str2 = 'JQK red green'
list2 = str2.split() # list2直接转换 ['123', 'tree', 'green']
print('list2直接转换', list2)
# 只有一个空格
list2 = str2.split(' ')
print('list2直接转换', list2) # list2直接转换 ['123', 'tree', '', '', '', 'green']
# 看上面的转换结果,是有区别的,具体查看split()的定义
#看上面的转换结果,是有区别的,具体查看split()的定义
输出结果分别是:
list直接转换 ['1', '2', '3', '4', '5', '6']
list直接转换 ['5', '6', ' ', '9', '6', '爱', ' ', '8']
list2直接转换 ['JQK', 'red', 'green']
list2直接转换 ['JQK', 'red', '', '', '', 'green']
str3='www.baidu.com'
list3=str3.split('.')
print('list3直接转换',list3)
输出结果是:
list3直接转换 ['www', 'baidu', 'com']
4.2 list–>str
tlist = ['1', '2', '3', '4']
str1 = str(tlist)
print('str的类型是:', type(str1))
print('直接使用str函数', str1)
# 从上面可以看出直接使用str转换,不可用
str2 = ''.join(tlist)
print('join转换str', str2)
str3 = '.'.join(tlist)
print('用.join转换str', str3)
str4 = ' '.join(tlist)
print('用空格join转换str', str4)
str5 = '\n'.join(tlist)
print('用换行join转换str:', str5, sep='\n')
输出结果分别是:
str的类型是: <class 'str'>
直接使用str函数 ['1', '2', '3', '4']
join转换str 1234
用.join转换str 1.2.3.4
用空格join转换str 1 2 3 4
用换行join转换str:
1
2
3
4
5.csv转excel
最简单的方法就是打开CSV然后另存为xlsx或者xls后缀即可。
为啥要写这个呢,在爬虫中分析完的数据想写入excel比csv要麻烦点(提取复杂的json数据,将需要的键值依次存入到Excel比较麻烦)。
ps:关于将复杂json存入到xlsx文件有更好方法大家也可以分享一下。