| 操作方法 | 功能 | 描述 | 操作类型 |
|---|---|---|---|
| + | 合并 | 将两个相同类型序列进行连接 | 字符串、列表、元组 |
| * | 复制 | 将里面的数据进行复制 | 字符串、列表、元组 |
| len | 获取序列长度 | 查看序列长度 | 字符串、列表、元组、字典,集合 |
| reversed | 倒置 | 将容器里面的数据倒置 | 字符串、列表、元组、字典 |
| max, min | 最大最小值 | 求容器数据的最大最小值 | 字符串、列表、元组、字典(key),集合 |
| sum | 求和 | 将容器的数据求和 | 列表、元组、字典(key,其为字符串不能使用),集合 |
| enumerate | 索引映射 | 将索引映射给容器里面的数据 | 列表、元组、或字符串 |
| in, not in | 是否存在 | 判断数据是否存在于容器内 | 字符串、列表、元组、字典,集合 |
| del | 删除 | 删除变量或者指定容器内数据 | 变量,容器里面的值 |
# reversed 倒置 将容器里面的数据倒置 字符串、列表、元组、字典
l1 = [1, 2, 3]
print(reversed(l1)) # <list_reverseiterator object at 0x0000022CE5786A40>
# 可以转为列表使用或者for循环使用
print(list(reversed(l1))) # [3, 2, 1]
for i in reversed(l1):
print(i)
# 3
# 2
# 1
# enumerate 索引映射 索引映射给容器里面的数据 列表、元组、或字符串
l1 = ['a', 'b', 'c']
# 转换为常见数据类型或for循环使用
print(list(enumerate(l1))) # [(0, 'a'), (1, 'b'), (2, 'c')]
for index, data in enumerate(l1, start=0): # start = 开始的索引值(不写也可,默认为0)
print(index, data)
# 0 a
# 1 b
# 2 c
# 字典转为列表
goods = {"name1": "可乐", "name2": "雪碧", "name3": "炸鸡"}
list1 = list(goods)
print(list1) # ['name1', 'name2', 'name3'] 所有的key值转换成了列表
list2 = list(goods.values())
print(list2) # ['可乐', '雪碧', '炸鸡'] 所有的value值转换成了列表
# 列表转字典
# 列表是不能够直接dict转换成字典
# 1)嵌套列表转字典
a = ['可乐', '雪碧']
b = ['3元', '5元']
c = [a, b] # 嵌套的形式转换
print(c) # [['可乐', '雪碧'], ['3元', '5元']]
print(dict(c)) # {'可乐': '雪碧', '3元': '5元'}
# ps:若列表长度不一致,会报错
# 2)使用zip()函数将列表转换成字典
a = ['可乐', '雪碧', '炸鸡']
b = ['3元', '5元']
c = zip(a, b)
print(c) # <zip object at 0x0000010FC5DD0040>
print(list(c)) # [('可乐', '3元'), ('雪碧', '5元')] 若长度不一样,多出的元素会不显示。
print(dict(c)) # {'可乐': '3元', '雪碧': '5元'} 若长度不一样,多出的元素会不显示。
# 列表推导式
# 代码简写,增加运行效率 减少代码可读性,难理解
# 普通写法
list_data = []
for i in range(10):
list_data.append(i)
print(list_data)
# 推导式写法 不是所有代码都可以简写为推导式,只有一种固定操作
# 创建列表,循环数据,添加数据(append),没有其他操作
list_data = [i for i in range(10)]
print(list_data)
# 普通写法
list_data = []
for i in range(10):
if i % 2 == 0:
list_data.append(i)
print(list_data)
# 创建列表,循环数据,添加数据位置永远在最前面 if(多个也可以,但不建议,可读性太差)放后面
list_data = [i for i in range(10) if i % 2 == 0]
print(list_data)
# 三元表达式
# 普通写法
age = 16
if age > 18:
print("成年")
else:
print("未成年")
# 三元表达式的写法
age = 16
print("成年") if age > 18 else print("未成年")
# 普通写法,if分支语句种含有赋值
age = 16
if age > 18:
data = 1
else:
data = 0
print(data)
# if分支语句种含有赋值的三元表达式写法
data = 1 if age > 18 else 0
print(data)
# 列表推导式与三元表达式
# 普通写法
list_data = []
for i in range(10):
if i % 2 == 0:
list_data.append(i)
else:
list_data.append((str(i)))
print(list_data)
# 列表推导式与三元表达式结合使用
list_data = [i if i % 2 == 0 else str(i) for i in range(10)]
print(list_data)
ps:一般使用较多的就是列表创建时的列表推导式,其他不推荐使用,代码可读性太差,只需要认识其表达含义即可。
假设我有一个在Ruby中看起来像这样的哈希:{:ie0=>"Hi",:ex0=>"Hey",:eg0=>"Howdy",:ie1=>"Hello",:ex1=>"Greetings",:eg1=>"Goodday"}有什么好的方法可以将它变成如下内容:{"0"=>{"ie"=>"Hi","ex"=>"Hey","eg"=>"Howdy"},"1"=>{"ie"=>"Hello","ex"=>"Greetings","eg"=>"Goodday"}} 最佳答案 您要求一个好的方法来做到这一点,所以答案是:一种您或同事可以在六个月后理解
我有一个使用SeleniumWebdriver和Nokogiri的Ruby应用程序。我想选择一个类,然后对于那个类对应的每个div,我想根据div的内容执行一个Action。例如,我正在解析以下页面:https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=puppies这是一个搜索结果页面,我正在寻找描述中包含“Adoption”一词的第一个结果。因此机器人应该寻找带有className:"result"的div,对于每个检查它的.descriptiondiv是否包含单词“adoption
我正在我的Rails项目中安装Grape以构建RESTfulAPI。现在一些端点的操作需要身份验证,而另一些则不需要身份验证。例如,我有users端点,看起来像这样:moduleBackendmoduleV1classUsers现在如您所见,除了password/forget之外的所有操作都需要用户登录/验证。创建一个新的端点也没有意义,比如passwords并且只是删除password/forget从逻辑上讲,这个端点应该与用户资源。问题是Grapebefore过滤器没有像except,only这样的选项,我可以在其中说对某些操作应用过滤器。您通常如何干净利落地处理这种情况?
在我做的一些网络开发中,我有多个操作开始,比如对外部API的GET请求,我希望它们同时开始,因为一个不依赖另一个的结果。我希望事情能够在后台运行。我找到了concurrent-rubylibrary这似乎运作良好。通过将其混合到您创建的类中,该类的方法具有在后台线程上运行的异步版本。这导致我编写如下代码,其中FirstAsyncWorker和SecondAsyncWorker是我编写的类,我在其中混合了Concurrent::Async模块,并编写了一个名为“work”的方法来发送HTTP请求:defindexop1_result=FirstAsyncWorker.new.async.
a=[3,4,7,8,3]b=[5,3,6,8,3]假设数组长度相同,是否有办法使用each或其他一些惯用方法从两个数组的每个元素中获取结果?不使用计数器?例如获取每个元素的乘积:[15,12,42,64,9](0..a.count-1).eachdo|i|太丑了...ruby1.9.3 最佳答案 使用Array.zip怎么样?:>>a=[3,4,7,8,3]=>[3,4,7,8,3]>>b=[5,3,6,8,3]=>[5,3,6,8,3]>>c=[]=>[]>>a.zip(b)do|i,j|c[[3,5],[4,3],[7,6],
我有一个非常简单的Controller来管理我的Rails应用程序中的静态页面:classPagesController我怎样才能让View模板返回它自己的名字,这样我就可以做这样的事情:#pricing.html.erb#-->"Pricing"感谢您的帮助。 最佳答案 4.3RoutingParametersTheparamshashwillalwayscontainthe:controllerand:actionkeys,butyoushouldusethemethodscontroller_nameandaction_nam
我刚刚安装了带有RVM的Ruby2.2.0,并尝试使用它得到了这个:$rvmuse2.2.0--defaultUsing/Users/brandon/.rvm/gems/ruby-2.2.0dyld:Librarynotloaded:/usr/local/lib/libgmp.10.dylibReferencedfrom:/Users/brandon/.rvm/rubies/ruby-2.2.0/bin/rubyReason:Incompatiblelibraryversion:rubyrequiresversion13.0.0orlater,butlibgmp.10.dylibpro
我正在运行Ubuntu11.10并像这样安装Ruby1.9:$sudoapt-getinstallruby1.9rubygems一切都运行良好,但ri似乎有空文档。ri告诉我文档是空的,我必须安装它们。我执行此操作是因为我读到它会有所帮助:$rdoc--all--ri现在,当我尝试打开任何文档时:$riArrayNothingknownaboutArray我搜索的其他所有内容都是一样的。 最佳答案 这个呢?apt-getinstallri1.8编辑或者试试这个:(非rvm)geminstallrdocrdoc-datardoc-da
我已经通过提供MagickWand.h的路径尝试了一切,我安装了命令工具。谁能帮帮我?$geminstallrmagick-v2.13.1Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingrmagick:ERROR:Failedtobuildgemnativeextension./Users/ghazanfarali/.rvm/rubies/ruby-1.8.7-p357/bin/rubyextconf.rbcheckingforRubyversion>=1.8.5...yescheckingfor/
我一定是犯了n00b错误。我编写了以下Ruby代码:moduleFoodefbar(number)returnnumber.to_s()endendputsFoo.bar(1)测试.rb:6:in':undefinedmethodbar'forFoo:Module(NoMethodError)我想在名为Foo.bar的模块上定义一个方法。但是,当我尝试运行代码时,出现未定义方法错误。我做错了什么? 最佳答案 你可以这样做:moduleFoodefself.bar(number)number.to_sendendputsFoo.bar