一、基础数据类型的坑:

元组:

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

# 只有一个数据,且没有逗号的情况:
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']}

创建字典的三种方式:

dic  = { 'name':'chris','age':18,'job':'iT'}

dic = dict(  { 'name':'chris','age':18,'job':'iT'} )     # 通过构造函数,实例化一个对象

dic  = dict.fromkeys(['name','age','job'],'default')

字典循环中的坑:

## 删除字典中 键 包含 'k'的键,的键值对
dic = {'key1':"value1",'key2':'value2','k3':'value3','name':'chris','manager':'jiayong'}
# for k in dic: # RuntimeError: dictionary changed size during iteration
# if 'k' in k:
# dic.pop(k)
# print(dic)
## 报错,字典在循环过程中,不能改变字典的大小
## 方法,不循环字典,将字典的所有key取出,放到列表,循环列表,删除字典元素
keys = list(dic)
# print(keys)
for key in keys:
if 'k' in key:
dic.pop(key)
print(dic) # {'name': 'chris', 'manager': 'jiayong'}

数据类型转换:

int  str  bool

int   ----> str

str(integer)

str ------> int

int(str)      # 将字符串转换为整型,前提条件字符串由数字字符组成

int  ---> bool   非零即True,零即False

bool --> int  True为1,False为0

dict.keys()   dict.values()  dict.items()  list()

tuple <----> list

dict -------> list

dic = {"name":'chris',"age":18}
print(list(dic)) # ['name', 'age']
class dict(object):
"""
dict() -> new empty dictionary
dict(mapping) -> new dictionary initialized from a mapping object's
(key, value) pairs
dict(iterable) -> new dictionary initialized as if via:
d = {}
for k, v in iterable:
d[k] = v
dict(**kwargs) -> new dictionary initialized with the name=value pairs
in the keyword argument list. For example: dict(one=1, two=2)
"""

ls = [['a','b']]
print( dict(ls) ) # {'a': 'b'}
l1 = ['a','b'] #
print(dict([l1])) # {'a': 'b'} 可见将列表,转换为dict ,是有一定条件的

str 《------》 list

# str <---> list
str = 'abcef'
ls = list(str)
print(ls) # ['a', 'b', 'c', 'e', 'f']
ls = ['a', 'b', 'c', 'e', 'f','h','j']
newStr = "".join(ls)
print(newStr)

0 "  [] () {} set() ---> bool False

二、集合

### && 集合是无序的,集合的中的数据必须是不可变数据类型(即可哈希类型),但集合本身是可变类型,集合具有天然的去重功能,没有重复数据
##集合的创建,集合与字典都是由大括号或花括号包围起来的,区别是字典中的元素是键值对,而集合中是一个一个的元素
set1 = set({1,3,5,'a','chris',(1,2)})
set2 = {1,3,6,'chris',('a',1)}
print(set1)
print(set2)
print(set2) # set3 = {1,[1,3,3]} # 因为[1,3,3]列表是可变数据类型,把以报错了 TypeError: unhashable type: 'list'
## 集合具有天然的去重功能
set5 = {11,1,3,3,98,8}
print(set5) # {8, 1, 98, 3}
# 集合的增
set5.add(159)
print(set5) # update()方法,迭代着增加
'''
PEP8代码规范     1、单独一行的注释:# + 1空格 + 注释内容     2、代码后跟着的注释:2空格 + # + 1空格 + 注释内容 '''
set5.update("ROOT") # 只是对集合进行操作,没有返回值
# 这是一行注释
print(set5) # {'O', 1, 98, 3, 'R', 8, 'T', 159}
# #删除
set5.pop() # 移除并返回任意一个集合元素
print(set5)
set5.remove(159) # 移除指定的元素
print(set5)
set5.clear() # 清空集合中的所有元素
del set5 # 从内存级别删除整个set5集合

set1 = {1,2,3}
set3 = frozenset(set1)
print(set3) # 不可变的数据类型。 **

set5 = {set3:"这是一个frozenset集合"}  # {frozenset({1, 2, 3}): '这是一个frozenset集合'}

print(set5)  

 

三、深浅copy

1.题
把列表中所有姓周的人的信息删掉(升级题 :此题有坑,请慎重):
lst = [ '周老二','周星星','麻花藤','周扒皮' ]
结果:lst = ['麻花藤']
'''
# 方法一:
# lst = [ '周老二','周星星','麻花藤','周扒皮' ]
# tmp_lst = []
# for e in lst:
# if '周' not in e:
# tmp_lst.append(e)
# lst = tmp_lst
# print(lst)
# 方法二:
# lst = [ '周老二','周星星','麻花藤','周扒皮' ]
# for i in range(len(lst)-1,-1,-1): # range()方法只会执行一次,谨记
# if '周' in lst[i]:
# lst.pop(i)
# print(lst)
# 方法三:
# lst = [ '周老二','周星星','麻花藤','周扒皮' ]
# for i,e in enumerate(lst): # 用到了分别赋值
# if '周' in e:
# lst[i] = 'delete'
# for count in range( lst.count('delete')) :
# lst.remove('delete')
# print(lst)
# 方法四:
# for i in lst[:]: # 切片是浅拷贝
# if '周' == i.strip()[0]:
# lst.remove(i)
# print(lst)

基础数据类型的坑和集合及深浅copy的更多相关文章

  1. python 的基础 学习 第八天数据类型的补充 ,集合和深浅copy

    1,数据类型的补充: 元组()tuple,如果只有元素,并且没有逗号,此元素是什么数据类型,该表达式就是什么数据类型. tu = ('rwr') print(tu,type(tu)) tu = ('r ...

  2. python之数据类型补充、集合、深浅copy

    一.内容回顾 代码块: 一个函数,一个模块,一个类,一个文件,交互模式下,每一行就是一个代码块. is == id id()查询对象的内存地址 == 比较的是两边的数值. is 比较的是两边的内存地址 ...

  3. 基础数据类型汇总补充;集合set ;深浅copy

    首先回顾: 小数据池:int -5~256str 特殊字符,*数字20 ascii : 8位 1字节 表示1个字符unicode 32位 4个字节 表示一个字符utf- 8 1个英文 8位,1个字节 ...

  4. 基础数据类型之集合和深浅copy,还有一些数据类型补充

    集合 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的.以下是集合最重要的两点: 去重,把一个列表变成集合,就自动去重了. 关系 ...

  5. 07、python的基础-->数据类型、集合、深浅copy

    一.数据类型 1.列表 lis = [11, 22, 33, 44, 55] for i in range(len(lis)): print(i) # i = 0 i = 1 i = 2 del li ...

  6. python-基础数据类型,集合及深浅copy

    一 数据类型定义及分类 我们人类可以很容易的分清数字与字符的区别,但是计算机并不能呀,计算机虽然很强大,但从某种角度上看又很傻,除非你明确的告诉它,1是数字,“汉”是文字,否则它是分不清1和‘汉’的区 ...

  7. python的学习笔记01_4基础数据类型列表 元组 字典 集合 其他其他(for,enumerate,range)

    列表 定义:[]内以逗号分隔,按照索引,存放各种数据类型,每个位置代表一个元素 特性: 1.可存放多个值 2.可修改指定索引位置对应的值,可变 3.按照从左到右的顺序定义列表元素,下标从0开始顺序访问 ...

  8. day 07 数据类型,集合,深浅copy

    1.day 06 内容回顾 小数据池 int :-5-256 str:特殊字符 ,*20 ascii:8位 1字节 表示一个字符 unicode:32位 4个字节 , 表示一个字符 字节表示8位表示一 ...

  9. Python学习之路基础篇--07Python基础+编码、集合 和 深浅Copy

    1 小数据池(节省内存) 只有数字和字符串中内存,储存在同一个内存地址中 数字的范围在-5~256中,字符串有以下两个特点:不能含有特殊字符,还有就s*20 不是同一个地址,而要*21就不是了 2 编 ...

随机推荐

  1. scss切页面

    html <div class="data-list"> <div class="data-list-item"> <div cl ...

  2. PostgreSQL安装及使用教程二(zip解压方式)

    下载postgre包  下载地址:https://www.postgresql.org/download/ 选DOWNLOADS--Windows--zip archive--version10.6- ...

  3. Java 多线程 fork-join

    fork-join我们可以理解为分而治之,就是说当一个任务非常大的时候,我们可以按照一定的业务需求拆分为若干个小的任务,最后把这些小的任务再聚合起来. 下面就通过fork-join实现一个从1加到10 ...

  4. Ubuntu vim终端常用的快捷键

    Ubuntu中常用的快捷键 Ubuntu中的许多操作在终端(Terminal)中十分的快捷,记住一些快捷键的操作更得心应手.在Ubuntu中打开终端的快捷键是Ctrl+Alt+T.其他的一些常用的快捷 ...

  5. Java接口简单理解

    1.接口: 接口成员变量默认声明方式:public.static.final 接口成员方法默认声明方式:public.abstract public interface Interface_class ...

  6. 20171024xlVBA批量获取PPT\WORD\PDF页数

    Public Sub ModifyFileNames() Dim FolderPath As String Dim FileNames As Variant Dim dotPos As Long Di ...

  7. 20170821xlVBA跨表公式套用

    Public Sub CopyModelHideBlankRows() AppSettings Dim StartTime As Variant Dim UsedTime As Variant Sta ...

  8. codeforces736b Taxes (Codeforces Round #382 (Div. 1))

    题意:纳税额为金额的最大因数(除了本身).为了逃税将金额n分为n1+n2+.......问怎样分纳税最少. 哥德巴赫猜想: 任一大于2的偶数都可写成两个质数之和. 质数情况: 任何大于5的奇数都是三个 ...

  9. android--------自定义控件 之 组合控件篇

    上篇介绍了自定义控件的自定义属性篇,地址:http://www.cnblogs.com/zhangqie/p/8969163.html 这篇博文主要来说说 自定义控件的组合控件来提高布局的复用 使用自 ...

  10. Django用户认证组件

    用户认证 主要分两部分: 1.auth模块   from django.contrib import auth 2.User对象 from django.contrib.auth.models imp ...