>- [数据1,数据2,数据3,数据4,......]
>- 列表可以存储多个数据,数据之间的逗号以英文分割而且可以数据是不同类型的数据,列表是可变数据类型。
>- 空列表 list_data = [] 或者 list_data = list()
# 使用 [ ] 直接创建列表
li = [1,2,3,4,"张三","李四"]
# 使用 list() 函数创建列表
li2 = list('123456789')
> 列表的作用是⼀次性存储多个数据,程序员可以对这些数据进行的操作有:增、删、改、查等等
# 使用索引访问列表元素的格式为:name_list[i]
name_list = ['张三', '李四', '王五','赵六']
print(name_list[0])
print(name_list[1])
print(name_list[2])
# 使用切片访问列表元素的格式为:name_list[start : end : step]
name_list = ['张三', '李四', '王五','赵六']
print(name_list[0:4:2])
| 方法 | 描述 |
|---|---|
| append() | 在列表最后添加一个数据 |
| pop() | 从列表中删除一个数据,默认删除(根据索引)最后一个 |
| sort() | 对数据进行排序,默认从小到大排序 |
| reverse() | 倒置列表 |
| count() | 统计列表中的某一个数据出现的次数 |
| index() | 查找索引 |
| extend() | 把可迭代对象里的数据一个一个追加到列表中 |
| remove() | 删除某个数据 |
| insert() | 插入数据 |
| clear() | 清空列表中的数据 |
| copy() | 复制列表 |
# append() 在列表的最后添加一个数据
list_data = []
new_data = list_data.append("小明")
print(new_data)
print(list_data)
# pop() 从列表中删除一个数据,默认删除(根据索引)最后一个,相当于pop(-1)
list_data = [1, 2, 3, 4, 5, 6, 7]
data = list_data.pop()
print(list_data) # [1, 2, 3, 4, 5, 6]
print(data) # 7
list_data.pop(0)
print(list_data) # [2, 3, 4, 5, 6]
# sort(key,reverse) 对数据进行排序,默认从小到大排序,即默认是reverse=False
# 其他数据类型也是可以进行排序的,是根据ascll码对应数值大小进行排序
list_data = [2, 3, 9, 6, 5, 2, 1]
list_data.sort()
print(list_data) # [1, 2, 2, 3, 5, 6, 9]
list_data.sort(reverse=True)
print(list_data) # [9, 6, 5, 3, 2, 2, 1]
# reverse() 倒置列表
list_data = [1, 3, 2]
list_data.reverse()
print(list_data) # [2, 3, 1]
# count() 统计列表中的某一个数据出现的次数,这里需注意,不仅判断数值大小,其数据类型也相同才会计数
list_data = [1, 3, 2, 3, 3, 1, 1, '2', '2', '2']
data = list_data.count(1) # 这里与前面的方法不同,这个会返回一个值,需要变量来接收
print(list_data) # [1, 3, 2, 3, 3, 1, 1, '2', '2', '2']
print(data) # 3
print(list_data.count(2)) # 1
print(list_data.count('2')) # 3
# index() 查找索引,如果该数据有多个返回最前面的一个
list_data = [1, 3, 2, 3, 3, 1, 1, '2', '2', '2']
data = list_data.index(1) # 这里与前面的方法不同,这个会返回一个值,需要变量来接收
print(list_data) # [1, 3, 2, 3, 3, 1, 1, '2', '2', '2']
print(data) # 0
# extend(可迭代对象) 把可迭代对象里的数据一个一个追加到列表中
list_data1 = [1, 3, 2]
list_data2 = [4, 5, 6]
list_data3 = "小明"
print(list_data1 + list_data2) # [1, 3, 2, 4, 5, 6]
list_data1.extend(list_data2) # 这里与前面的方法不同,这个会返回一个值,需要变量来接收
print(list_data1) # [1, 3, 2, 4, 5, 6]
list_data1.extend(list_data3)
print(list_data1) # [1, 3, 2, 4, 5, 6, '小', '明']
# remove() 删除某个数据,有多个时删除最前面的
list_data = [1, 2, 3, 2]
list_data.remove(2)
print(list_data) # [1, 3, 2]
# insert(index, object) 插入数据
list_data = [1, 2, 3]
list_data.insert(0, "小明") # 0代表需要插入的位置的索引,”小明“为所需要插入的数据
print(list_data) # ['小明', 1, 2, 3]
# clear() 清空列表中的数据
list_data = [1, 2, 3]
list_data.clear()
print(list_data) # []
# copy() 复制列表 深复制 浅复制
list_data1 = [1, 2, 3]
list_data2 = list_data1
list_data2.pop()
print(list_data2) # [1, 2]
print(list_data1) # [1, 2]
list_data1 = [1, 2, 3]
list_data2 = list_data1
list_data2 = list_data1.copy()
list_data2.pop()
print(list_data2) # [1, 2]
print(list_data1) # [1, 2, 3]
>Python 支持通过切片语法给一组元素赋值。在进行这种操作时,如果不指定步长(step 参数),Python 就不要求新赋值的元素个数与原来的元素个数相同;这意味,该操作既可以为列表添加元素,也可以为列表删除元素。
name_list = ['张三', '李四', '王五','赵六']
name_list[0] = '阿坤'
print(name_list)
nums = [40, 36, 89, 2, 36, 100, 7]
#修改第 1~4 个元素的值(不包括第4个元素)
nums[1: 4] = [45.25, -77, -52.5]
print(nums)
name_list = ['张三', '李四', '王五','赵六']
for i in name_list:
print(i)
i = 0
name_list = ['Tom', 'Lily', 'Rose']
while i < len(name_list):
print(name_list[i])
i += 1
> 所谓列表嵌套指的就是⼀个列表⾥⾯包含了其他的⼦列表
list1 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(list1[1]) # [4, 5, 6]
print(list1[1][1]) # 5
>- (数据1,数据2,数据3,数据4,......)
>- 不可变数据类型,元组不可修改,列表中的元组也不可以修改,但元组中的列表可以修改。
>- 单个数据的元组,需要定义为tuple_data = (1, ),需要在后面加一个逗号
>- 空元组 tuple_data = () 或者 tuple_data = tuple()
tuple1 = ('aa', 'bb', 'cc', 'bb')
print(tuple1[0])
tuple1 = ('aa', 'bb', 'cc', 'bb')
print(tuple1.index('aa')) # 0
tuple1 = ('aa', 'bb', 'cc', 'bb')
print(tuple1.count('bb')) # 1
tuple1 = ('aa', 'bb', 'cc', 'bb')
print(len(tuple1)) # 4
tup = ("python","yyds")
print(tup)
del tup
print(tup) # NameError: name 'tup' is not defined
# 元组内的直接数据如果修改则⽴即报错
# 但是如果元组⾥⾯有列表,修改列表⾥⾯的数据则是⽀持的。
tup = (1, 2, 3, [4, 5])
print(tup, id(tup)) # (1, 2, 3, [4, 5]) 1455401272328
tup[-1].append(6)
print(tup, id(tup)) # (1, 2, 3, [4, 5, 6]) 1455401272328
>可变数据类型 :当该数据类型的对应变量的值发生了改变,那么它对应的内存地址不发生改变,对于这种数据类型,就称可变数据类型。
不可变数据类型: 当该数据类型的对应变量的值发生了改变,那么它对应的内存地址也会发生改变,对于这种数据类型,就称不可变数据类型。
"""数值"""
a = 1
print(a, id(a)) # 1 1440395456
a = a + 1
print(a, id(a)) # 2 1440395488
"""字符串"""
b = 'a'
print(b, id(b)) # a 2463434018520
b = b.upper()
print(b, id(b)) # A 2463434215920
"""列表"""
li = [1, 2, 3, 4, 5]
print(li, id(li)) # [1, 2, 3, 4, 5] 2464553888584
li.append(6)
print(li, id(li)) # [1, 2, 3, 4, 5, 6] 2464553888584
"""元组"""
tup = (1, 2, 3, [4, 5])
print(tup, id(tup)) # (1, 2, 3, [4, 5]) 2464553829384
tup[-1].append(6)
print(tup, id(tup)) # (1, 2, 3, [4, 5, 6]) 2464553829384
是否有类似“RVMuse1”或“RVMuselist[0]”之类的内容而不是键入整个版本号。在任何时候,我们都会看到一个可能包含5个或更多ruby的列表,我们可以轻松地键入一个数字而不是X.X.X。这也有助于rvmgemset。 最佳答案 这在RVM2.0中是可能的=>https://docs.google.com/document/d/1xW9GeEpLOWPcddDg_hOPvK4oeLxJmU3Q5FiCNT7nTAc/edit?usp=sharing-知道链接的任何人都可以发表评论
我正在使用Rails3.2.3和Ruby1.9.3p0。我发现我经常需要确定某个字符串是否出现在选项列表中。看来我可以使用Ruby数组.includemethod:或正则表达式equals-tildematchshorthand用竖线分隔选项:就性能而言,一个比另一个好吗?还有更好的方法吗? 最佳答案 总结:Array#include?包含String元素,在接受和拒绝输入时均胜出,对于您的示例只有三个可接受的值。对于要检查的更大的集合,看起来Set#include?和String元素可能会获胜。如何测试我们应该根据经验对此进行测试
在尝试实现应用auto_orient的过程之后!对于我的图片,我收到此错误:ArgumentError(noimagesinthisimagelist):app/uploaders/image_uploader.rb:36:in`fix_exif_rotation'app/controllers/posts_controller.rb:12:in`create'Carrierwave在没有进程的情况下工作正常,但在添加进程后尝试上传图像时抛出错误。流程如下:process:fix_exif_rotationdeffix_exif_rotationmanipulate!do|image|
这是我发现自己偶尔想做的事情。假设我有一个参数列表。在Lisp中,我可以像这样`(imaginary-function,@args)为了调用将数组从一个元素转换为正确数量的参数的函数。Ruby中是否有类似的功能?或者我只是在这里使用了一个完全错误的成语? 最佳答案 是的!它被称为splat运算符。a=[1,44]p(*a) 关于Ruby:如何将数组拼接成Lisp风格的列表?,我们在StackOverflow上找到一个类似的问题: https://stackov
@locations=Location.all#currentlistingall@locations=Location.slice(5)orLocation.split(5)使用Ruby,我试图将我的列表分成4列,每列限制为5个;然而,切片或拆分似乎都不起作用。知道我可能做错了什么吗?任何帮助是极大的赞赏。 最佳答案 您可能想使用in_groups_of:http://railscasts.com/episodes/28-in-groups-of这是RyanBates在railscast中的示例用法:
我有一个Rails应用程序,我正在尝试使用acts_as_list插件设置可排序列表。数据库中的位置字段正在更新,但是在呈现页面时,不考虑顺序。我想我是在寻求帮助。这是我的模型...classQuestionMembership:question_membershipsendclassQuestion:question_membershipsacts_as_listend还有给我列表的草率View代码...>true)%>拖放用于重新排序。数据库中QuestionMembership对象的位置值更新,页面实际上正确显示重新排序。问题是在页面重新加载时,它默认返回到它感觉的任何顺序。我认
ruby中有没有一个很好的方法来删除可枚举列表中的重复项(即拒绝等) 最佳答案 对于数组你可以使用uniq()方法a=["a","a","b","b","c"]a.uniq#=>["a","b","c"]所以如果你只是(1..10).to_a.uniq或%w{antbatcatant}.to_a.uniq因为无论如何,几乎所有您实现的方法都将作为Array类返回。 关于Ruby删除可枚举列表中的重复项,我们在StackOverflow上找到一个类似的问题: h
我使用脚手架和Rails3创建了2个模型。模型是位置和作业,每个作业都有一个位置。我在脚手架生成代码中创建了所需的引用调用,但是当我查看创建新作业的View时,我看到的只是一个文本框,我应该在其中添加location_id。我怎样才能让它变成下拉菜单以获得更好的用户体验? 最佳答案 想象一下,您有每个位置的titleAPI:http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/collection_select 关于r
给定一个最小整数和最大整数,我想创建一个数组,它从最小值到最大值以二为单位计数,然后倒退(再次以二为单位,重复最大数)。例如,如果最小数是1,最大数是9,我想要[1,3,5,7,9,9,7,5,3,1].我试图尽可能简洁,这就是我使用单行代码的原因。在Python中,我会这样做:range(1,10,2)+range(9,0,-2)在我刚刚开始学习的Ruby中,到目前为止我所想到的是:(1..9).inject([]){|r,num|num%2==1?r这行得通,但我知道必须有更好的方法。这是什么? 最佳答案 (1..9).step
这个问题在这里已经有了答案:nakedasteriskasparameterinmethoddefinition:deff(*)(1个回答)关闭9年前。我今天浏览了Rails3ActiveRecord源代码,发现amethodwheretheentireparameterlistwasasingleasterisk.defsave(*)我找不到很好的描述来说明它的作用(尽管我有一些基于我对splat参数的了解的想法)。它有什么作用,为什么要使用它?