草庐IT

10公共操作与推导式

DaGuo'sBlogs 2023-05-07 原文

公共操作与推导式

公共操作

操作方法 功能 描述 操作类型
+ 合并 将两个相同类型序列进行连接 字符串、列表、元组
* 复制 将里面的数据进行复制 字符串、列表、元组
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

容器类型的转换

  • 所有数据类型都可以转换为字符串
  • 转换为集合的时候需要注意数据的去重
  • 字典数据转换是需要注意按照key还是value转换
# 字典转为列表
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:一般使用较多的就是列表创建时的列表推导式,其他不推荐使用,代码可读性太差,只需要认识其表达含义即可。

有关10公共操作与推导式的更多相关文章

  1. ruby - 在 Ruby 中创建按公共(public)键值分组的新哈希 - 2

    假设我有一个在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"}} 最佳答案 您要求一个好的方法来做到这一点,所以答案是:一种您或同事可以在六个月后理解

  2. ruby - 如何使用 Selenium Webdriver 根据 div 的内容执行操作? - 2

    我有一个使用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

  3. ruby-on-rails - 如何处理 Grape 中特定操作的过滤器之前? - 2

    我正在我的Rails项目中安装Grape以构建RESTfulAPI。现在一些端点的操作需要身份验证,而另一些则不需要身份验证。例如,我有users端点,看起来像这样:moduleBackendmoduleV1classUsers现在如您所见,除了password/forget之外的所有操作都需要用户登录/验证。创建一个新的端点也没有意义,比如passwords并且只是删除password/forget从逻辑上讲,这个端点应该与用户资源。问题是Grapebefore过滤器没有像except,only这样的选项,我可以在其中说对某些操作应用过滤器。您通常如何干净利落地处理这种情况?

  4. ruby-on-rails - 在 Ruby on Rails 中发送响应之前如何等待多个异步操作完成? - 2

    在我做的一些网络开发中,我有多个操作开始,比如对外部API的GET请求,我希望它们同时开始,因为一个不依赖另一个的结果。我希望事情能够在后台运行。我找到了concurrent-rubylibrary这似乎运作良好。通过将其混合到您创建的类中,该类的方法具有在后台线程上运行的异步版本。这导致我编写如下代码,其中FirstAsyncWorker和SecondAsyncWorker是我编写的类,我在其中混合了Concurrent::Async模块,并编写了一个名为“work”的方法来发送HTTP请求:defindexop1_result=FirstAsyncWorker.new.async.

  5. ruby - 在 Ruby 中是否有一种惯用的方法来操作 2 个数组? - 2

    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],

  6. ruby-on-rails - 如何让 Rails View 返回其关联的操作名称? - 2

    我有一个非常简单的Controller来管理我的Rails应用程序中的静态页面:classPagesController我怎样才能让View模板返回它自己的名字,这样我就可以做这样的事情:#pricing.html.erb#-->"Pricing"感谢您的帮助。 最佳答案 4.3RoutingParametersTheparamshashwillalwayscontainthe:controllerand:actionkeys,butyoushouldusethemethodscontroller_nameandaction_nam

  7. 由于 libgmp.10.dylib 的问题,Ruby 2.2.0 无法运行 - 2

    我刚刚安装了带有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

  8. ruby - ri 有空文件 – Ubuntu 11.10, Ruby 1.9 - 2

    我正在运行Ubuntu11.10并像这样安装Ruby1.9:$sudoapt-getinstallruby1.9rubygems一切都运行良好,但ri似乎有空文档。ri告诉我文档是空的,我必须安装它们。我执行此操作是因为我读到它会有所帮助:$rdoc--all--ri现在,当我尝试打开任何文档时:$riArrayNothingknownaboutArray我搜索的其他所有内容都是一样的。 最佳答案 这个呢?apt-getinstallri1.8编辑或者试试这个:(非rvm)geminstallrdocrdoc-datardoc-da

  9. ruby-on-rails - gem install rmagick -v 2.13.1 错误 Failed to build gem native extension on Mac OS 10.9.1 - 2

    我已经通过提供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/

  10. ruby - 在 Ruby 模块中定义公共(public)方法? - 2

    我一定是犯了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

随机推荐