python中数据类型分为不可变数据类型和可变数据类型
可变数据类型包括:List(列表)、Dictionary(字典)、Set(集合)
不可编数据类型包括:Number(数字)、String(字符串)、Tuple(元组)
#不可变数据类型
str1 = "ascdfg"
str2 = str1
print(str2)
print("----------------------------")
str1 = "ooooooopo"
print(id(str1))
print(id(str2))
--------------------------------------------
ascdfg
----------------------------
2278845527984
2278844137392
> 运行结果显示:内存地址不同
可变数据类型
可变数据类型赋值后不会创建新的内存地址空间
赋值数据与被赋值数据还是同时指向同一块地址
#可变数据类型
list1 = [1,2,3]
list2 = list1 #将list1的值赋给list2
print("改变前")
print(list2) #输出list2
print("----------------------------")
list1[0] = 2 #将list1的第一个元素赋值为2
print("改变后")
print("list1:\t",id(list1))
print("list2:\t",id(list2))
运行结果显示:内存地址相同
#列表截取
t = [1,5,6,7,2,9]
a = t[2:5]
b = t[2:]
print(a)
print(b)
---------------------------------------------------
[6, 7, 2]
[6, 7, 2, 9]
[2:5]是左闭右开的一个区间,故截取的是[6,2,7],而[2:]译为截取从编号2开始到最后一个
append()方法添加列表项,并对数据项进行修改或更新
#append()方法添加列表项
list1 = ['aaaa','qwe','zxc']
list2 = list1
print("第三个元素为",list1[2])
list1.append('cccccc')
print(list2)
---------------------------------------------------
第三个元素为 zxc
['aaaa', 'qwe', 'zxc', 'cccccc']
del语句删除列表元素
#使用del语句进行删除列表项
list1 = ['asd','zxc','qwe']
del list1[0]
print(list1)
---------------------------------------------------
['zxc', 'qwe']
len(list)函数查询列表元素个数
list1 = [1,2,5,6,8,2,4,2]
print(len(list1))
---------------------------------------------------
8
max(list)函数返回列表元素的最大值
list1 = [1,2,7,8,9,2,4,2]
print(max(list1))
---------------------------------------------------
9
min(list)函数返回列表元素的最小值
list1 = [1,2,7,8,9,2,4,2]
print(min(list1))
---------------------------------------------------
1
list(seq)函数将元组转换为列表
tup = ('asx','apple',1,5,5)
print("tup的数据类型为",type(tup))
list1 = list(tup) #将tup元组转换为列表并赋值给list1
print(list1)
print("list1的数据类型为",type(list1))
---------------------------------------------------
tup的数据类型为 <class 'tuple'>
['asx', 'apple', 1, 5, 5]
list1的数据类型为 <class 'list'>
list.count(obj)函数统计某个元素在列表中出现的次数
#count()方法统计某个元素在列表中出现的次数
list1 = [1,2,5,6,8,2,4,2]
list2 = list1.count(2)
print(list2)
---------------------------------------------------
3
list.extend(seq)函数在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
#extend()方法进行扩展列表
list1 = ['apple','qaz','wsx']
list2 = list(range(0,5)) #range()创建0-4的列表
list1.extend(list2)
print(list1)
---------------------------------------------------
['apple', 'qaz', 'wsx', 0, 1, 2, 3, 4]
list.index(obj)从列表中找出某个值第一个匹配项的索引位置
#index()从列表找出某一个值第一个匹配项的索引位置
list1 = [1,5,3,6,9,8]
print(list1.index(3))
---------------------------------------------------
2
list.insert(index,obj)将对象插入列表
#insert()将对象插入列表
list1 = ['apple','qaz','wsx']
list1.insert(1,'qwe') #insert(索引位置,要插入的对象)
print(list1)
---------------------------------------------------
['apple', 'qwe', 'qaz', 'wsx']
list.pop([index=-1])移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
#pop()移除列表的一个元素(默认最后一个元素),并返回该元素的值
list1 = ['apple','qaz','wsx']
list_pop = list1.pop(1)
print("删除项为",list_pop)
print("列表现在为",list1)
---------------------------------------------------
删除项为 qaz
列表现在为 ['apple', 'wsx']
list.remove(obj)移除列表中某个值的第一个匹配项
#remove()移除列表中某个值的第一个匹配项
list1 = ['qsd','apple','wsx','apple']
list_remove = list1.remove('apple')
print(list1)
---------------------------------------------------
['qsd', 'wsx', 'apple']
list.reverse()反向列表中的元素
#reverse()反向列表中的元素
list1 = ['apple','qaz','wsx']
list_re = list1.reverse()
print(list1)
---------------------------------------------------
['wsx', 'qaz', 'apple']
list.sort(key=None,reverse=False)对列表进行排序
#sort()对原列表进行排序
list1 = [1,5,3,6,9,8]
list0 = [1,6,4,2,3,8,1,9]
list2 = list0.sort(reverse=True) #reverse=true 降序
list3 = list1.sort(reverse=False) #reverse=falses 升序
print("降序",list0)
print("升序",list1)
---------------------------------------------------
降序 [9, 8, 6, 4, 3, 2, 1, 1]
升序 [1, 3, 5, 6, 8, 9]
list.clear()清空列表
#clear()清空列表
list1 = [1,5,3,6,9,8]
list1.clear()
print(list1)
---------------------------------------------------
[]
list.copy()复制列表
#copy()复制列表
list1 = [1,5,3,6,9,8]
list2 = list1.copy()
print(list2)
---------------------------------------------------
[1, 5, 3, 6, 9, 8]
tup1 = ("asd","asdasd",[1,2,5,9,8])
print(type(tup1))
print(tup1[-1])
---------------------------------------------------
<class 'tuple'>
[1, 2, 5, 9, 8]
访问字典中的值(通过键去访问对应的值)
d = {"age":13,"sex":'男',"name":"lihua"}
print(d["sex"])
---------------------------------------------------
男
创建空字典的两种方法
#创建空字典法一
emptydict = {}
print(emptydict)
print(len(emptydict))
print(type(emptydict))
---------------------------------------------------
{}
0
<class 'dict'>
#创建空字典法二
emptydict1 = dict()
print(emptydict1)
print(len(emptydict1))
print(type(emptydict1))
---------------------------------------------------
{}
0
<class 'dict'>
修改字典
#修改字典
d = {"age":13,"sex":'男',"name":"lihua"}
d["age"] = 10 #更新age
d["school"] = "北京大学" #增添信息
print(d["age"])
print(d["school"])
---------------------------------------------------
10
北京大学
删除、添加字典元素
#删除字典元素
d = {"age":13,"sex":'男',"name":"lihua"}
d1 = dict() #创建空字典
d1["name"] = "张伟" #添加信息
print(d1["name"])
del d1["name"] #删除字典信息
d1.clear() #清除字典
print(d1)
---------------------------------------------------
张伟
{}
ax = {'apple','qwe','apple','lllsd','qwe'}
print(ax)
#创建集合
ax1 = set("adsa")
print(ax1)
#判断元素是否在集合中
z = 'apple' in ax
print(z)
---------------------------------------------------
{'qwe', 'lllsd', 'apple'}
{'a', 'd', 's'}
True
数据转换可分为两种:隐式类型转换--自动完成、显示类型转换--需要使用类型函数进行转换
将较低数据类型(整数)转换为较高数据类型(浮点数)以避免数据丢失
num_int = 123
num_float = 1.23
num_new = num_int + num_float
print("num_int的数据类型",type(num_int))
print("num_float的数据类型",type(num_float))
print("num_new的值",num_new)
print("num_new的数据类型",type(num_new))
---------------------------------------------------
num_int的数据类型 <class 'int'>
num_float的数据类型 <class 'float'>
num_new的值 124.23
num_new的数据类型 <class 'float'>
由于整型和字符串类型相加运算结果会报错,输出TypeError,因此在这种情况下无法进行隐式转换。故python提供了一种解决方案称为显示转换。
#显示类型转换
num_int = 123
num_str = "456"
print("num_int的数据类型",type(num_int))
print("类型转换前,num_str的数据类型",type(num_str))
num_str = int(num_str) #强制转换为整型
print("类型转换后,num_str的数据类型",type(num_str))
num_sum = num_int + num_str
print("num_int和num_str相加的结果为",num_sum)
print("sum的数据类型为",type(num_sum))
---------------------------------------------------
num_int的数据类型 <class 'int'>
类型转换前,num_str的数据类型 <class 'str'>
类型转换后,num_str的数据类型 <class 'int'>
num_int和num_str相加的结果为 579
sum的数据类型为 <class 'int'>
python推导式是一种独特的数据处理方式,可以从一个数据序列构建另一个新的数据序列的结构题,python支持各种数据结构的推导式。
[表达式 for 变量 in 列表]
[out_exp_res for out_exp in input_list]
或
[表达式 for 变量 in 列表 if 条件]
[out_exp_res for out_exp in input_list if condition]
#列表推导式
news = ['Tom','Bob','Smith','Lorry','James','Curry']
new_names = [name.upper() for name in news if len(name)>3]
print(new_names)
---------------------------------------------------
['SMITH', 'LORRY', 'JAMES', 'CURRY']
#计算从0到30可以整除3的整数
match_30 = [i for i in range(31) if i % 3 == 0]
print(match_30)
---------------------------------------------------
[0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30]
我的目标是转换表单输入,例如“100兆字节”或“1GB”,并将其转换为我可以存储在数据库中的文件大小(以千字节为单位)。目前,我有这个:defquota_convert@regex=/([0-9]+)(.*)s/@sizes=%w{kilobytemegabytegigabyte}m=self.quota.match(@regex)if@sizes.include?m[2]eval("self.quota=#{m[1]}.#{m[2]}")endend这有效,但前提是输入是倍数(“gigabytes”,而不是“gigabyte”)并且由于使用了eval看起来疯狂不安全。所以,功能正常,
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我需要读入一个包含数字列表的文件。此代码读取文件并将其放入二维数组中。现在我需要获取数组中所有数字的平均值,但我需要将数组的内容更改为int。有什么想法可以将to_i方法放在哪里吗?ClassTerraindefinitializefile_name@input=IO.readlines(file_name)#readinfile@size=@input[0].to_i@land=[@size]x=1whilex 最佳答案 只需将数组映射为整数:@land边注如果你想得到一条线的平均值,你可以这样做:values=@input[x]
这道题是thisquestion的逆题.给定一个散列,每个键都有一个数组,例如{[:a,:b,:c]=>1,[:a,:b,:d]=>2,[:a,:e]=>3,[:f]=>4,}将其转换为嵌套哈希的最佳方法是什么{:a=>{:b=>{:c=>1,:d=>2},:e=>3,},:f=>4,} 最佳答案 这是一个迭代的解决方案,递归的解决方案留给读者作为练习:defconvert(h={})ret={}h.eachdo|k,v|node=retk[0..-2].each{|x|node[x]||={};node=node[x]}node[
我可以得到Infinity和NaNn=9.0/0#=>Infinityn.class#=>Floatm=0/0.0#=>NaNm.class#=>Float但是当我想直接访问Infinity或NaN时:Infinity#=>uninitializedconstantInfinity(NameError)NaN#=>uninitializedconstantNaN(NameError)什么是Infinity和NaN?它们是对象、关键字还是其他东西? 最佳答案 您看到打印为Infinity和NaN的只是Float类的两个特殊实例的字符串
我不确定传递给方法的对象的类型是否正确。我可能会将一个字符串传递给一个只能处理整数的函数。某种运行时保证怎么样?我看不到比以下更好的选择:defsomeFixNumMangler(input)raise"wrongtype:integerrequired"unlessinput.class==FixNumother_stuffend有更好的选择吗? 最佳答案 使用Kernel#Integer在使用之前转换输入的方法。当无法以任何合理的方式将输入转换为整数时,它将引发ArgumentError。defmy_method(number)
有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳
我有三个模型:classReleaseItem:pack_release_itemsendclassPack:pack_release_itemsendclassPackReleaseItem问题是,在执行期间,如果我将一个包添加到release_item,它并不知道该包是一个包。例如:Loadingdevelopmentenvironment(Rails2.1.0)>>item=ReleaseItem.new(:filename=>'MAESTRO.TXT')=>#>>pack=Pack.new(:filename=>'legion01.zip',:year=>1998)=>#>>i