基础数据类型的坑和集合

基础数据类型的坑:

元组:

如果一个元组中,只有一个元素,且没有逗号,则该"元组"与里面的数据的类型相同。

# 只有一个数据,且没有逗号的情况:
print(tu1,type(tu1))  # 156 <class 'int'>
tu2 = ("expected")
print(tu2,type(tu2)) #  expected <class 'str'>

那么,在只有一个元素的情况下,如何让元组成其为元组呢?方法就是,在数据的后面,加一个逗号。

#在只有一个数据的情况下,后面加逗号,就实现了元组仅有一个数据时候,也是元组。
tu1 = (123,) print(tu1,type(tu1)) # (123,) <class 'tuple'> tu2 = ('kitty',) print(tu2,type(tu2)) # ('kitty',) <class 'tuple'>

列表:

## 列表与列表可以相加
l1 = [1,3,5]
l2 = ["h","b","a"]
result = l1 + l2
print(result)     # [1,3,5,'h','b','a']

将列表中,索引为奇数的元素,全部删除掉。

## 将列表中索引为奇数的元素,全部删除掉
ls = [00,11,22,33,44,55,66,77]
# 方法一:切片 + 步长
# del ls[1::2]
# print(ls) # [00,22,44,66]
#
# ls = [00,11,22,33,44,55,66,77]
# for i in range(len(ls)):
#     if i % 2 == 1:
#         ls.pop(i)    #  IndexError: pop index out of range
# print(ls)
# 在循环一个列表时,如果对列表中的元素进行删除操作,它后面的所有元素就会向前进一步,导致后面元素的索引发生变化,
# 因此就抛出了错误:IndexError: pop index out of range
# 方法二:将原列表中的索引为偶数的元素,追加到另外一个空列表中,然后再把新新列表 赋值给原列表
# tmp_list = []
# for i in range(len(ls)):    # range() 顾头不顾尾, 在for 循环中, in 后面的表达式,只在循环开始时,执行一次
#     if i % 2 == 0:
#         tmp_list.append(ls[i])
# ls = tmp_list
# print(ls)

# 方法三:倒着删除,即从列表的后面,向前面方向删除,这向前面未删除元素,索引不会变,不会导致索引超出范围

# for index in range(len(ls)-1,-1,-1):  # range(start,end,step)
#     if index % 2 == 1:
#         ls.pop(index)
# print(ls)

# 方法四:在第一次循环过程中,将奇数索引元素,赋值一个标记值 ,然后统计列表,标记值的数量 ,通过循环移除
for index in range(len(ls)):
    if index % 2 == 1:
        ls[index] = "mark_delete"
counts = ls.count("mark_delete")
for count in range(counts):
    ls.remove("mark_delete")    # remove()方法,删除找到的第一个元素
print(ls)

 字典:

 fromkeys() 

## 字典
# fromkeys() 这个方法,即是一个类方法,dict类,可以调用 ,也是一个对象方法,对象也可以调用
dic = dict.fromkeys(['a','b','c'])  # 返回一个新字典 通过 来自迭代对象的key, 默认value为None
print(dic)  # {'a': None, 'b': None, 'c': None}
dic = dict.fromkeys(['a','b','c'],15238)
print(dic)  #  {'a': 15238, 'b': 15238, 'c': 15238}

dic_src = {'name':'chris','age':18,'job':"IT"}
print(dic_src)         #  {'name': 'chris', 'age': 18, 'job': 'IT'}
new_dic = dic_src.fromkeys(dic_src)  # 如果迭代对象是dict即字典,取得的key
print(new_dic)  # {'name': None, 'age': None, 'job': None}

new2_dic = dic_src.fromkeys(dic_src,['jeans'])
print(new2_dic)         #  {'name': ['jeans'], 'age': ['jeans'], 'job': ['jeans']}
print(id(new2_dic['name']))
print(id(new2_dic['age']))
print(new2_dic['name'] is new2_dic['age'])
new2_dic['name'].append('skr')   # 对于对象,如果元素的值一个对象,并且相同的话,内存中会共享一份,因此改共享对象中的内容时,其它也会也
print(new2_dic)   # {'name': ['jeans', 'skr'], 'age': ['jeans', 'skr'], 'job': ['jeans', 'skr']}
new2_dic['name'] = 'aaa'  # 现在不是修改键 对应对象中的内容,而是将键的值修改别的对象,对原来键 的值所对应的对象没有影响,因此不影响其它元素
print(new2_dic) # {'name': 'aaa', 'age': ['jeans', 'skr'], 'job': ['jeans', 'skr']}

猜你喜欢

转载自www.cnblogs.com/chris-jia/p/9459491.html