python基础——数据类型

基础知识

数据类型

数据类型脑图

所谓可变与不可变,即为内存地址不变的情况下值是否可变
以字符串为例:字符串类型看似是可变的,只需要重新赋值即可,但是每次赋值都会创建一个全新的对象,都是指向一个新的地址,并不会改变原有地址上的值,所以其实是不可变的
下面通过id()函数验证一下。通过输出结果可以看出字符串重新赋值后内存地址是改变的

   a = 'hello'
   print(id(a)) # 140204376011888
   a = 'world'
   print(id(a)) # 140204913431344
   b = [1,2,3,4,5,6,7]
   print(id(b)) # 140204913422144
   b.append(8)
   print(id(b)) # 140204913422144

变量赋值

不需要声明变量类型变量名 = 值
每个变量在使用前必须赋值,只有被赋值之后的变量才会在内存中被创建,变量被赋值之后会自动解析其类型,若想看变量的类型可通过type()函数来查询对应的数据类型
python亦可支持多变量赋值

  1. 多变量同值 变量1=变量2=变量3=值
  2. 多变量不同值 变量1,变量2,变量3=值1,值2,值3 ⚠️变量的数量需和值的数量相对应

字符串

字符串类型使用单引号或者双引号括起来,其中可能会用转义字符\进行转译,当外层和内层都用到'时需要将内层的单引号用转义字符\进行转译print('hello \'world\'')输出为:【hello 'world'】

  • ➕是字符串的连接符
  • 星号*表示复制当前字符串
  • 截取字符串的语法为:变量[开始下标,结束下标]

常用方法:

方法名 参数 方法用途 例子
capitalize 返回首字母大写的字符串格式 hello'.capitalize()输出结果为:Hello
casefold 将所有大写字母转为小写 'HELLOWORLD'.casefold()输出结果为:helloworld
center width所返回字符串的长度,若小于等于原有字符串长度则返回原有字符串,fillchar指定字符 使用指定的字符(默认为空格)作为填充字符使字符串居中对齐。返回居中的字符串 'hello world'.center(13,',')输出结果为:,hello world,
count value元素、start开始索引、end结束索引 返回指定元素在字符串中出现的次数。 'hello world'.count('o')输出结果为:2
startswith value元素、start开始索引、end结束索引 如果以指定值开头的字符串,则返回 true。 'hello world'.startswith('hello world'输出结果为:True
endswith value元素、start开始索引、end结束索引 如果字符串以指定元素结尾,则返回 True,否则返回 False。 'hello world'.endswith('hello world'输出结果为:True
expandtabs size制表符代表的空格数量,一般为8 expandtabs() 方法将制表符的大小设置为指定的空格数。 '\thello world'.expandtabs(8)输出结果为: hello world
find value元素、start开始下标、end结束下标 查找并返回指定元素首次出现的下标,如果找不到则返回-1。和index方法的区别为index如果找不到会报错 print('\thello world'.find('l'))输出结果为:3
format value1、value2…… 格式化字符串,给占位符赋值。占位符使用大括号 {} 定义。1. {变量名}2. {0}、{1}3. {} 1. print('hello {name},you are {age} years old'.format(name = 'zhangsan', age = 20));2. print('hello {0},you are {1} years old'.format('zhangsan', 20));3. print('hello {},you are {} years old'.format('zhangsan',20))输出结果为:hello zhangsan,you are 20 years old4. zhangsan = {'name':'zhangsan','age':20};print('hello {name},you are {age} years old'.format(**zhangsan))
index value元素、start开始下标、end结束下标 查找并返回指定元素首次出现的下标,如果找不到则报错 print('\thello world'.index('l'))输出结果为:3
isalnum 如果字符串中的所有元素都是字母数字,则返回 True。 计算机中存储汉字的方式是汉字内码,所以带有中文也是满足条件的。'hello啊401'.isalnum()输出结果为:True
isalpha 如果字符串中的所有元素都是字母,则返回 True。 'hello啊'.isalpha()输出结果为:True
isdigit 如果字符串中的所有元素都是数字,则返回 True。 '243546.13'.isdigit()输出结果为:False原因:有点
isidentifier 如果字符串是标识符,则返回 True。 'dhd_ads'.isidentifier()输出结果为:True
islower 如果字符串中的所有元素都是小写,则返回 True。 可以有中文特殊符号等,只要没大写都为true。不检查数字、符号和空格,仅检查字母字符。'cdjdhsjwwe啊。.232'.islower()输出结果为:True
isnumeric 如果字符串中的所有都是数,则返回 True。 '2324231231'.isnumeric()输出结果为:True
isprintable 如果字符串中的所有的元素都是可打印的,则返回 True。不可打印的字符可以是回车和换行符。 print('\n'.isprintable())输出结果为:False
isspace 如果字符串中的所有字符都是空白字符,则返回 True。 '\t'.isspace()输出结果为:True.若为空字符串则为false
istitle 如果字符串遵循标题规则,则返回 True。如果文本中的所有单词均以大写字母开头,而单词的其余部分均为小写字母,则 istitle() 方法返回 True。否则返回 False。 '哈喽,Hello World Nihaoya'.istitle()输出结果为:True
isupper 如果字符串中的所有字符都是大写,则返回 True。 'PLAY'.isupper()输出结果为:True
join 可迭代对象,里面的元素只能是str不能是int 把可迭代对象的元素连接到字符串的末尾。 '——'.join(('halou','world','how','are','you'))输出结果为:halou——world——how——are——you
ljust width所返回字符串的长度,若小于等于原有字符串长度则返回原有字符串,若大于原有字符串长度向右补充指定字符。fillchar指定字符,默认是空格 返回字符串的左对齐版本。 'dfdsfd'.ljust(10,'-'输出结果为:dfdsfd----
rjust width所返回字符串的长度,若小于等于原有字符串长度则返回原有字符串,若大于原有字符串长度向右补充指定字符。fillchar指定字符,默认是空格 返回字符串的右对齐版本。 'dfdsfd'.rjust(10,'-')输出结果为:----dfdsfd
lower 把字符串转换为小写。 '哈喽,Hello World Nihaoya'.lower()输出结果为:哈喽,hello world nihaoya
upper 把字符串转换为大写。 '哈喽,Hello World Nihaoya'.lower()输出结果为:哈喽,HELLO WORLD NIHAOYA
strip characters一组要删除的前导/结尾字符 返回字符串的剪裁版本。删除所有前导和结尾字符(空格是要删除的默认前导字符)。 '------dss---fdsfsds---'.lstrip('-')输出结果为:dss---fdsfsds
lstrip characters一组作为前导字符要删除的字符。 返回字符串的左修剪版本。该方法删除所有前导字符(空格是要删除的默认前导字符)。 '------dss---fdsfsds---'.lstrip('-')输出结果为:dss---fdsfsds---
rstrip characters一组作为结尾字符要删除的字符。 返回字符串的右边修剪版本。该方法删除所有结尾字符(空格是要删除的默认结尾字符)。 '------dss---fdsfsds---'.lstrip('-')输出结果为:------dss---fdsfsds
partition value指定字符串 搜索指定的字符串,并将该字符串拆分为包含三个元素的元组。第一个元素包含指定字符串之前的部分。第二个元素包含指定的字符串。第三个元素包含字符串后面的部分。只搜索指定字符串的第一个匹配项。 'zheyangzima oumaiga den'.partition(' ')输出结果为:('zheyangzima', ' ', 'oumaiga den')
rpartition value指定字符串 搜索指定的字符串,并将该字符串拆分为包含三个元素的元组。第一个元素包含指定字符串之前的部分。第二个元素包含指定的字符串。第三个元素包含字符串后面的部分。只搜索指定字符串的最后一个匹配项。 'zheyangzima oumaiga den'.partition(' ')输出结果为:('zheyangzima oumaiga', ' ', 'den')
replace oldvalue、newvalue、count可选。数字,指定要替换的旧值出现次数。默认为所有的出现。 返回字符串,其中指定的值被替换为指定的值。 'zhangsan nihao a'.replace('an','lisi',1)输出结果为:zhlisigsan nihao a
rfind value、start、end 在字符串中搜索指定的值,并返回它被找到的最后位置。如果找不到则返回-1 'zhangsan nihao a'.rfind('an')输出结果为:6
rindex value、start、end 在字符串中搜索指定的值,并返回它被找到的最后位置。如果找不到则抛异常 'zhangsan nihao a'.rindex('an')输出结果为:6
rsplit separator 拆分字符串的分隔符,默认为空格,max 指定拆分数,默认为-1,也即所有地方。默认不指定max与split用途相同,指定max后从后面开始拆分。指定max后会得到max+1个元素 用指定的分隔符处拆分字符串,并返回列表。 'hello world'.rsplit('o',1)输出结果为:['hello w', 'rld']
split separator 拆分字符串的分隔符,默认为空格,指定max后从前面开始拆分 在指定的分隔符处拆分字符串,并返回列表。 'hello world'.split('o',1)输出结果为:['hell', ' world']
splitlines keeplinebreaks 是否包含换行符,True为包含 False为不包含,默认为不能包含,也即换行符当作一行去拆分 按行拆分字符串并返回列表。 print(str3.splitlines(keepends=False));# ['', ' hello', ' how', ' are you', ' i fine', ' thank you', ' and', ' you?', ' '] print(str3.splitlines(keepends=True))# ['\n', ' hello\n', ' how\n', ' are you\n', ' i fine\n', ' thank you\n', ' and\n', ' you?\n', ' ']
swapcase 切换大小写,小写成为大写,反之亦然。 '哈喽,Hello World Nihaoya'.swapcase()输出结果为:哈喽,hELLO wORLD nIHAOYA
title 把每个单词的首字符转换为大写。 'hello world'.title()输出结果为:Hello World
zfill len 指定字符串长度 在字符串的开头填充0 ,直到达到指定的字符串长度,如果原有字符串长度小于指定长度则直接返回原字符串 'hello'.zfill(20)输出结果为:000000000000000hello

casefold和lower的区别

首先来看一下两个的源码中是怎么说的?
lower-> Return a copy of the string converted to lowercase.
casefold-> Return a version of the string suitable for caseless comparisons.
从上面可以看出,lower只是去看大小写,不论是英文字母或者德语、俄罗斯语、法语等,它都会去看一下是否有大写字母,如果有则转成小写后返回结果。
但是casefold在考虑大小写的过程中还考虑到一层是能否做字符串的比较运算,考虑到字符串的语言环境,会对其进行转换。比如德语中的ß会转换为ss

isdecimal具体用途以及isnumeric和isdigit的区别暂时还没搞很清楚,后边补上

Number

int

常用方法:

方法名 参数 方法用途 例子
as_integer_ratio 返回一对整数,其比值正好等于原始整数,分母为正。 (10).as_integer_ratio() 输出结果为:(10, 1)。如果是bool类型,True结果为:(1,1).False结果为:(0, 1)
bit_length 用二进制表示自身所需的位数。 (10).bit_length()输出结果为:4,该值的二进制为1010,共有4位

float

常用方法:

方法名 参数 方法用途 例子
as_integer_ratio 返回一对整数,其比率恰好等于原始浮点数,分母是正的。在无穷大上引发OverflowError,在nan上引发ValueError。 (10.0).as_integer_ratio() 输出结果为:(10, 1)
is_integer 判断是否为整数,整数返回True,浮点数返回False (3.0).is_integer()输出结果为:True

complex

复数由实部和虚部组成,实部和虚部都应该是浮点型。虚部末尾以j或J结束
例如:15.3+6.29j

bool

布尔类型只有两个值:True和False
bool类型可以使用int类型的方法,因为布尔类型的True相当于是int类型的1,False相当于是int类型的0

Tuple元组

形式:(值1,值2,……,值n)
tuple虽然为不可变类型,但是其内部可以包含可变对象,例如list
()表示空元组
如果要创建只有一个元素的元组:(1,)切记需要加个逗号

切片对于字符串、元组、列表都适用,选取的区间为左闭右开
变量[起始下标,结束下标,步长]
[:]从头取到尾
[::-1]倒着取

常用方法:

方法名 参数 方法用途 例子
count value元组中的某个元素 查看元组中某个元素在元组中出现的个数 (1,2,3,4,5).count(5)输出结果为:1
index value、start、end 查看指定元素的下标,如果指定start和end则从该范围内查找,如果元组中不存在则抛异常 (1,2,3,4,5).index(5)输出结果为:4
tuple seq列表 将列表或者其他可迭代对象转换为元组 tuple('hello')输出结果为:('h', 'e', 'l', 'l', 'o')

练习题:

    '''
    1 创建score 元组,其中包含10 个数值 (675,345,56,377,76,885,564,34,723,51);
    2 输出score 元组中第2个元素的数值;
    3  输出score 元组中第1~3 个元素的值;
    '''
    score = (675,345,56,377,76,885,564,34,723,51)
    print(score[1])
    print(score[0:3])

List列表

形式:[值1,值2,……,值n]
list为有序集合,为可变类型,可随时添加、删除、更新指定元素。可以被截取,可以使用+或者相关方法来进行拼接,可以使用*一个数字进行复制

常用方法:

方法名 参数 方法用途 例子
append obj 在元素末尾添加新的对象 lis1.append([2,5,6])。打印lis2的输出结果为:[1, 2, 4, 5, 7, 9, [2, 5, 6]],这里的参数为object类型,所以可以追加任何类型的对象
clear 从列表中移除所有元素 lis1.clear()输出结果:空列表[]
copy 浅拷贝,返回值为拷贝的列表 lis1.copy()
count value元素 统计某个元素在列表中出现的次数,如果列表中没有则为0 [3,5,7,8,3].count(1)
extend 可迭代对象 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表),如果参数为一个列表,会将参数列表中的参数拆开存进去,不会当作一个新对象来存储 lis2.extend([2,5,8,4])打印lis2的输出结果: [3, 5, 7, 8, 3, 2, 5, 8, 4]
index value,start,end 从列表中找出某个值第一个匹配项的索引位置,如果指定start和end则从该范围内查找,如果元组中不存在则抛异常 [2,5,8,0,2].index(2)。输出结果为:0
insert index,object 将对象插入列表 lis2.insert(0,[2,5,9]) 打印lis2的输出结果:[[2, 5, 9], 3, 5, 7, 8, 3, 2, 5, 8, 4]
pop index 移除列表中的一个元素(默认最后一个元素),并返回该元素的值 lis2.pop(3).输出结果:7
remove value 移除列表中某个值的第一个匹配项 lis2.remove(8) 打印lis2的输出结果:[[2, 5, 9], 3, 5, 3, 2, 5, 8, 4]
reverse 反向列表中的元素 lis2.reverse()。打印lis2的输出结果为:[4, 8, 5, 2, 3, 5, 3]
sort key 为排序方法,可写lambda表达式,函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。reverse 排序规则,reverse = True 降序, reverse = False 升序(默认)。 对原列表进行排序 对于字符串列表,默认是按照首字母进行排序,如果首字母相等则比较第二个字母,以此类推s1 = ['hi','hello','omg','soga']s1.sort(key=lambda x:x[1])输出结果为:['hello', 'hi', 'omg', 'soga']

由上面的copy方法涉及到了深拷贝和浅拷贝。这里具体讲一下深拷贝、浅拷贝的区别,以及python对于可变类型的深拷贝、浅拷贝的几种方法
浅拷贝指不拷贝子对象的内容,只拷贝子对象的引用。而深拷贝会连子对象的内存也全部拷贝一份,对于子对象的修改不会影响到源对象

  1. 直接赋值,即a=list b=a的问题,变量b直接指向a的地址。是为浅拷贝,内存地址完全相同,改变任意一个变量里的任意一个值,另一个变量都会有对应的变化


    直接赋值
  2. copy方法 【列表的copy方法与copy包的copy方法效果等同】
    第一次对b进行append时,只是在b原有的基础上增加了一个对象,对a并不会造成任何影响
    对a[2]里追加对象时,由于b和a都来自同一个引用地址,所以两个都是跟着变化的
    最后a[0]=10,由于不可变string类型重新赋值时并不会改变其值,而是重新在内存中开辟一个新的空间赋新值,再将引用指向新值,所以a[0]的引用地址指向70的空间,而b[0]还是指向原有10所在空间
    最终的输出结果为:a: [70, 20, [5, 6, 30]] b: [10, 20, [5, 6, 30], 52]
    copy方法
  3. 深拷贝copy.deepcopy()


    深克隆

Dict字典

形式:{key1:value1,key2:value2}
字典为key-value的键值对类型
key必须使用不可变类型,并且key为唯一的,不可重复
{}创建空字典
常用方法:

方法名 参数 方法用途 例子
clear 删除字典内所有的元素 dic.clear() 打印dic输出结果为:{}
copy 返回一个字典的浅拷贝 dic2 = dic.copy() 打印dic2输出结果为:{'name': '张三', 'age': 20}
fromkeys seq也即keys 新字典的键所在的可迭代对象 val 所有键的值,默认是None 创建一个新字典,以序列 seq 中元素做字典的键,val 为字典所有键对应 的初始值 dict.fromkeys((1,5,9,3,6),20)输出结果为:{1: 20, 5: 20, 9: 20, 3: 20, 6: 20}
get key,default_value 返回指定键的值,如果值不在字典中返回default值 dic2.get('name','')输出结果:张三
items 以列表返回可遍历的(键, 值) 元组数组 dic2.items()输出结果为:dict_items([('name', '张三'), ('age', 20)])
keys 以列表返回一个字典所有的键 dic2.keys输出结果为:dict_keys(['name', 'age'])
pop key需要删除键值对的key,defaultvalue,假如指定的key不存在,如果指定了该值就会返回该值,否则会抛异常 删除字典给定键 key 所对应的值,返回值为被删除的值。如果key不存在返回defaultvalue的值 dic2.pop('nm','不用删了,key不存在')输出结果为:不用删了,key不存在
popitem 返回并删除字典中的最后一对键和值。 dic2.popitem()输出结果:{'age': 20, 'addr': 'bj', 'grade': 100.0}
setdefault key,default 和get()类似, 但如果键不存在于字典中,将会添加键并将值设 为default。如果key存在则对值进行覆盖 dic2.setdefault('alisa','zhangsan') dic2.setdefault('name','张潇洒')打印dic2的输出结果为:{'age': 20, 'addr': 'bj', 'grade': 100.0, 'alisa': 'zhangsan', 'name': '张潇洒'}
update 具有键值对的字典或者是可迭代对象 把字典或者可迭代对象【值默认为none】的键/值对插入到dict里 dic2.update(lever=4,classize=2)或者dic3.update({'tom': {'phone': '12545', 'addr': 'bj'}})
values 以列表返回字典中的所有值 dic2.values()输出结果为:dict_values([20, 'bj', 100.0, 'zhangsan', '张潇洒'])

Set集合

形式:{元素1,元素2,……,元素n}
set集合为无序不可重复的元素序列

注意创建空的set集合需要使用set函数,不能直接等于{},因为其为用来创建一个空的字典
如果创建集合里里面有重复数据,则会自动去重

常用方法:

方法名 参数 方法用途 例子
add 待添加元素 向集合中添加元素,如果该值在集合中已经存在也不添加。待添加元素只能为不可变类型 set1.add('hello')、set1.add(True)、set1.add((2,3))
clear 移除集合中的所有元素 set1.clean()
copy 浅拷贝一个集合 set1.copy()
difference 一个或者多个可迭代对象,将主对象与参数求差值 将两个或多个集合的差值作为一个新集合返回。 set2.difference([(1,2),(2,3)],{2,3,4,5,6,8})输出结果为:{1, 7, 9, 'hello'}
difference_update 一个或者多个可迭代对象 移除在另一个或多个集合中的元素 set2.difference_update([(1,2),(2,3)],{2,3,4,5,6,8})与difference方法的区别是该方法是在set2中进行删除,difference方法是将差值对象返回
discard 待删除元素 删除集合中指定的元素,若存在则删除,不存在也不抛异常 set2.discard('hello')
intersection 一个或多个可迭代对象 返回集合的交集,是作为一个新对象来返回的 set2.intersection({2,3,4,5,6,8,9})输出结果为:{9}
intersection_update 一个或多个可迭代对象 取集合的交集,将交集保留在原对象中,其他值移除 set2.intersection_update({1,2,3,4,5,6,8,9})
isdisjoint 一个可迭代对象 如果两个集合有零交集则返回True。 set2.isdisjoint((1,9)输出结果为:False
issubset 一个可迭代对象 判断该集合是否为参数集合的子集 print({1,9}.issubset([1,9]));print({1,9}.issubset((1, 9)));print({1,9}.issubset({1, 9}));print({9}.issubset({9:[1, 9]}))输出结果都为:True
issuperset 一个可迭代对象 判断参数集合是否为该集合的子集 print({1,8, 9}.issuperset([1, 9]));print({1,8, 9}.issuperset((1, 9)));print({1, 8,9}.issuperset({1, 9}));print({1,8,9}.issuperset({9: [1, 9]}))以上输出结果都为true
pop 随机移除元素 set2.pop()
remove 待移除元素 移除指定元素 set2.remove(9)如果待移除元素不存在则报错
symmetric_difference 一个可迭代对象 返回两个集合中不重复的元素集合并赋值给新集合即为a并b-a交b set1.symmetric_difference([1,3,9])
symmetric_difference_update 两个集合中不重复的元素集合,将不满足的元素从该集合中移除 set1.symmetric_difference_update([1,3,9])
union 一个或多个可迭代对象 返回两个集合的并集,将结果赋值给新的对象 set1.union([1,3,8,5,3],{2,4,6,8,10},((1,2,6,8),1,4))
update 一个或多个可迭代对象 给集合添加多个元素 set3.update([-1,-2,-3],{1,-9},'hello')输出结果为:{1, 2, 3, 4, 5, 6, 7, 8, 'h', 10, 'l', 'o', 'e', (1, 2, 6, 8), 'hello', (2, 3), -1, -9, -3, -2}

学以致用部分(o^^o)

'''
    集合练习题:
        经理有:曹操、刘备、孙权
        技术员:曹操、孙权、张飞、关羽
        用集合求:
            1. 既是经理也是技术员的有谁?
            2  是技术员但不是经理的人有谁?
            3  是经理,但不是技术员的有谁?
            4  张飞是经理吗?
            5  身兼一职的人有谁?
            6  经理和技术员共有几人?
    '''
        '''
    集合练习题:
        经理有:曹操、刘备、孙权
        技术员:曹操、孙权、张飞、关羽
        用集合求:
            1. 既是经理也是技术员的有谁?
            2  是技术员但不是经理的人有谁?
            3  是经理,但不是技术员的有谁?
            4  张飞是经理吗?
            5  身兼一职的人有谁?
            6  经理和技术员共有几人?
    '''
    manager = {'曹操','刘备','孙权'}
    technology = {'曹操','孙权','张飞','关羽'}
    print('既是经理也是技术员的有:',manager.intersection(technology))  # 既是经理也是技术员的有: {'孙权', '曹操'}
    print('是技术员但不是经理的人有:',technology-manager.intersection(technology))  # 是技术员但不是经理的人有: {'关羽', '张飞'}
    print('是经理,但不是技术员的有:',manager-manager.intersection(technology))  # 是经理,但不是技术员的有: {'刘备'}
    print('张飞是经理吗?不是为true,是为false。答案为:',manager.isdisjoint({'张飞'}))  # 张飞是经理吗?不是为true,是为false。答案为: True
    print('身兼一职的人有:',manager.symmetric_difference(technology))  # 身兼一职的人有: {'张飞', '关羽', '刘备'}
    num_set = manager.union(technology)
    num = len(num_set)
    print(f'经理和技术员共有{num}人')  # 经理和技术员共有5人

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,128评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,316评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,737评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,283评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,384评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,458评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,467评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,251评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,688评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,980评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,155评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,818评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,492评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,142评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,382评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,020评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,044评论 2 352

推荐阅读更多精彩内容