python基础 简单的疑难问题解决

lis = [11,22,33,44,55]
for i in range(len(lis)):
    print(i)       # i = 0              i = 1               i = 2
    del lis[i]
    print(lis)  #  [11,22,33,44,55]   [22, 44, 55]          [22, 44]

'''
    del lis[i]
IndexError: list assignment index out of range
报错原因:因为列表删除完成后更新,所以但是 循环条件len()不会因此改变,所以会报错
解决办法:倒着删除 或者重新建立新的空列表,在新列表进行操作,或者切片
'''
#第一种
lis = lis[::2]
print(lis)
#第二种
l1 = []
for i in lis:
    if lis.index(i) % 2 == 0:
        l1.append(i)
        print(lis)
lis = l1
print(lis)
#第三种 倒着删
lis = [11,22,33,44,55]
for i in range(len(lis)-1,-1,-1):
    if i % 2 == 1:
        print(i)
        del lis[i]
print(lis)

函数fromkeys()

dic = dict.fromkeys([1,2,3],[])
print(dic)  # {1: [], 2: [], 3: []}
dic[2].append('yuan')
print(dic)
dic[2] = '小小'
print(dic)
dic[1].extend('瓜子')
print(dic)
'''
{1: [], 2: [], 3: []}
{1: ['yuan'], 2: ['yuan'], 3: ['yuan']}
{1: ['yuan'], 2: '小小', 3: ['yuan']}
{1: ['yuan', '瓜', '子'], 2: ['yuan', '瓜', '子'], 3: ['yuan', '瓜', '子']}

当字典用fromkeys函数时,value都是一样的,同步改,当使用字典键索引直接改,将只改一个
'''

删除还有某些特定的键的字典

for i in dic:
    if 'k' in dic:
        del[dic.index(k)]
print(dic)
'''改方法会出错 在for函数中,字典不能被删除,会报错
解决方法:
新建字典
'''
dic = {'k1':'v1','k2':'v2','a3':'v3'}
dic1 = {}
for i in dic:
    if 'k' not in i:
        dic1.setdefault(i,dic[i])
print(dic1)
# 或者
#该方法为删除值为空的键值对
data_info = {
    'account': 1,
    'remark': 2,
    'sort': '',
    'weight': '',
}
for key in list(data_info.keys()):
    if not data_info.get(key):
        del data_info[key]
print(data_info)
#删除键 中含有't'的键
data_info = {
    'account': 1,
    'remark': 2,
    'sort': '',
    'weight': '',
}
for key in list(data_info.keys()):  #将date_info的键变成了一个列表才能运行
    if 't' in key:
        del data_info[key]
print(data_info)

#直接将字典进入for循环中
for key in data_info:
    if 't' in key:
        del data_info[key]
print(data_info)
# 报错 RuntimeError: dictionary changed size during iteration   运行时错误:字典在迭代过程中改变了大小

元祖的小细节

# 元祖 若元祖只有一个元素并且不添加','那么此元素是什么类型,该元祖就是什么类型
tu1 = (1)
tu2 = (1,)
print(tu1,type(tu1))
print(tu2,type(tu2))
'''
1 <class 'int'>
(1,) <class 'tuple'>
'''