如何有效地用逗号连接列表并在最后一个元素之前添加“and”

2024-02-27

我一直在经历自动化无聊的事情 http://automatetheboringstuff.com/并遇到了一个名为 Comma Code (end of第4章 https://automatetheboringstuff.com/chapter4/)。您必须编写一个函数,该函数接受一个列表并打印出一个字符串,用逗号连接元素并在最后一个元素之前添加“and”。

请记住,我对 python 或编程相当陌生,这仍然是一项可管理的任务,但输出在插入的“and”之前有一个逗号。所以我修改了代码来清理它。这是我的代码:

def comma_separator(someList):
    """The function comma_separator takes a list and joins it
       into a string with (", ") and adds " and " before the last value."""

    if type(someList) is list and bool(someList) is True:
        return ", ".join(someList[:-1]) + " and " + someList[-1]
    else:
        print("Pass a non-empty list as the argument.")

有更好的方法吗?有没有一个模块可以做到这一点?


你必须考虑到你只有的情况one元素:

def comma_separator(sequence):
    if not sequence:
        return ''
    if len(sequence) == 1:
        return sequence[0]
    return '{} and {}'.format(', '.join(sequence[:-1]), sequence[-1])

注意bool(sequence) is True是一种非常复杂的测试非空列表的方法;简单地使用if sequence:就足够了if语句寻找布尔值真值already.

可以说,使用序列以外的任何内容(可以索引并具有长度的内容)调用该函数应该只会导致异常。您通常不会测试此类函数中的类型。如果你did必须测试一种类型,使用isinstance(sequence, list)至少允许子类。

我还会将传递空列表设为错误。你可以将该异常变成ValueError:

def comma_separator(sequence):
    if len(sequence) > 1:
        return '{} and {}'.format(', '.join(sequence[:-1]), sequence[-1])
    try:
        return sequence[0]
    except IndexError:
        raise ValueError('Must pass in at least one element')

后者的演示:

>>> def comma_separator(sequence):
...     if len(sequence) > 1:
...         return '{} and {}'.format(', '.join(sequence[:-1]), sequence[-1])
...     try:
...         return sequence[0]
...     except IndexError:
...         raise ValueError('Must pass in at least one element')
... 
>>> comma_separator(['foo', 'bar', 'baz'])
'foo, bar and baz'
>>> comma_separator(['foo', 'bar'])
'foo and bar'
>>> comma_separator(['foo'])
'foo'
>>> comma_separator([])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 7, in comma_separator
ValueError: Must pass in at least one element
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何有效地用逗号连接列表并在最后一个元素之前添加“and” 的相关文章

  • 使用 python 进行串行数据记录

    Intro 我需要编写一个小程序来实时读取串行数据并将其写入文本文件 我在读取数据方面取得了一些进展 但尚未成功地将这些信息存储在新文件中 这是我的代码 from future import print function import se
  • 如何迭代按值排序的 Python 字典?

    我有一本字典 比如 a 6 b 1 c 2 我想迭代一下by value 不是通过键 换句话说 b 1 c 2 a 6 最直接的方法是什么 sorted dictionary items key lambda x x 1 对于那些讨厌 la
  • 从 ffmpeg 获取实时输出以在进度条中使用(PyQt4,stdout)

    我已经查看了很多问题 但仍然无法完全弄清楚 我正在使用 PyQt 并且希望能够运行ffmpeg i file mp4 file avi并获取流式输出 以便我可以创建进度条 我看过这些问题 ffmpeg可以显示进度条吗 https stack
  • 如何使用 imaplib 获取“消息 ID”

    我尝试获取一个在操作期间不会更改的唯一 ID 我觉得UID不好 所以我认为 Message ID 是正确的 但我不知道如何获取它 我只知道 imap fetch uid XXXX 有人有解决方案吗 来自 IMAP 文档本身 IMAP4消息号
  • 从零开始的 numpy 形状意味着什么

    好的 我发现数组的形状中可以包含 0 对于将 0 作为唯一维度的情况 这对我来说是有意义的 它是一个空数组 np zeros 0 但如果你有这样的情况 np zeros 0 100 让我很困惑 为什么这么定义呢 据我所知 这只是表达空数组的
  • 如何创建一个语句来打印以特定单词开头的单词? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如何在 python 中打印从特定字母开始的单词 而不使用函数 而是使用方法或循环 1 我有一个字符串 想要打印以 m 开头的单词 S
  • 如何计算numpy数组中元素的频率?

    我有一个 3 D numpy 数组 其中包含重复的元素 counterTraj shape 13530 1 1 例如 counterTraj 包含这样的元素 我只显示了几个元素 array 136 129 130 103 102 101 我
  • 为什么Python的curses中escape键有延迟?

    In the Python curses module I have observed that there is a roughly 1 second delay between pressing the esc key and getc
  • 在Python中调整图像大小

    我有一张尺寸为 288 352 的图像 我想将其大小调整为 160 240 我尝试了以下代码 im imread abc png img im resize 160 240 Image ANTIALIAS 但它给出了一个错误TypeErro
  • 对图像块进行多重处理

    我有一个函数必须循环遍历图像的各个像素并计算一些几何形状 此函数需要很长时间才能运行 在 24 兆像素图像上大约需要 5 小时 但似乎应该很容易在多个内核上并行运行 然而 我一生都找不到一个有据可查 解释充分的例子来使用 Multiproc
  • TensorFlow的./configure在哪里以及如何启用GPU支持?

    在我的 Ubuntu 上安装 TensorFlow 时 我想将 GPU 与 CUDA 结合使用 但我却停在了这一步官方教程 http www tensorflow org get started os setup md 这到底是哪里 con
  • 从 python 发起 SSH 隧道时出现问题

    目标是在卫星服务器和集中式注册数据库之间建立 n 个 ssh 隧道 我已经在我的服务器之间设置了公钥身份验证 因此它们只需直接登录而无需密码提示 怎么办 我试过帕拉米科 它看起来不错 但仅仅建立一个基本的隧道就变得相当复杂 尽管代码示例将受
  • 如何从Python中的字符串中提取变量名称和值

    我有一根绳子 data var1 id 12345 name John White python中有没有办法将var1提取为python变量 更具体地说 我对字典变量感兴趣 这样我就可以获得变量的值 id和name python 这是由提供
  • 按元组分隔符拆分列表

    我有清单 print L I WW am XX newbie YY ZZ You WW are XX cool YY ZZ 我想用分隔符将列表拆分为子列表 ZZ print new L I WW am XX newbie YY ZZ You
  • 使用 NumPy 将非均匀数据从文件读取到数组中

    假设我有一个如下所示的文本文件 33 346 1223 10 23 11 23 12 23 13 23 14 23 15 23 16 24 10 24 11 24 12 24 13 24 14 24 15 24 16 25 14 25 15
  • 迭代 my_dict.keys() 并修改字典中的值是否会使迭代器失效?

    我的例子是这样的 for my key in my dict keys my dict my key mutate 上述代码的行为是否已定义 假设my dict是一本字典并且mutate是一个改变其对象的方法 我担心的是 改变字典中的值可能
  • 当鼠标悬停在上面时,intellisense vscode 不显示参数或文档

    我正在尝试将整个工作流程从 Eclipse 和 Jupyter Notebook 迁移到 VS Code 我安装了 python 扩展 它应该带有 Intellisense 但它只是部分更糟糕 我在输入句点后收到建议 但当将鼠标悬停在其上方
  • Ubuntu 上的 Python 2.7

    我是 Python 新手 正在 Linux 机器 Ubuntu 10 10 上工作 它正在运行 python 2 6 但我想运行 2 7 因为它有我想使用的功能 有人敦促我不要安装 2 7 并将其设置为我的默认 python 我的问题是 如
  • Python 无法使用套接字绑定我的外部/公共 IP 地址,给出错误但是当使用本地 IP 地址时,错误不会显示

    这是出现主要错误的代码 与我的本地 IP 的绑定将起作用 s bind 192 168 1 4 port 与我的公共 IP 的绑定失败并出现以下错误 s bind 99 99 99 99 port WinError 10049 请求的地址在
  • 列表值的意外更改

    这是我的课 class variable object def init self name name alias parents values table name of the variable self name 这是有问题的函数 f

随机推荐

  • Java对象分配开销

    我正在用 Java 编写一个不可变的 DOM 树 以简化多线程的访问 然而 它确实需要尽可能快地支持插入和更新 由于它是不可变的 如果我对树的第 N 层上的节点进行更改 我需要分配至少 N 个新节点才能返回新树 我的问题是 预先分配节点而不
  • 数据框能做什么而 tibble 不能做什么?

    Tidyverse 的粉丝经常给出使用 tibbles 而不是数据帧的几个优点 其中大多数似乎都是为了保护用户免于犯错误而设计的 例如 与数据帧不同 tibbles 不需要一个 drop FALSE不从数据中删除维度的论点 不会让 运算符对
  • 如何在点击推送通知时打开Fragment

    我的 Firebasemessagingservice 类代码用于传递意图 private void showNotification String message Intent intent new Intent this DrawerA
  • 您使用哪种布局管理器?

    大家都用什么java GUI布局管理器 最近 我一直在使用米格布局 http www miglayout com 其中有一些强大的组件控件 只是想看看其他开发人员除了标准 JDK 之外还使用什么 米格布局 http www miglayou
  • 在 CollapsingToolbarLayout 中以编程方式更改layout_scrollFlags

    我的 xml 中有以下 CollapsingToolbarLayout 标记
  • C# 类的属性包

    访问 C 类属性 如 JavaScript 语言 将使生活变得更加轻松 我们如何在 C 中做到这一点 例如 someObject Property simple string Console WriteLine someObject Fir
  • 比较 Oracle 中的字符串

    我需要在表中查询给定字符串的值 该表区分大小写 但我想在比较中执行 ToLower 假设我有一个包含以下数据的类表 class teacher Mat101 Smith MAT101 Jones mat101 Abram ENG102 Sm
  • Perl 中 grep 的“no autovivication”编译指示失败

    我正在尝试使用该模块关闭自动激活 https metacpan org pod autovivification https metacpan org pod autovivification但 grep 失败 usr bin env pe
  • 定时器内存泄漏

    我正在使用一个在侦听器事件上取消并重新启动的计时器 除了计时器线程泄漏整个外部类之外 一切都工作正常 我的定时器实现如下 if timer null timer cancel timer null timer new Timer timer
  • Haskell:输入“putStrLn”时解析错误

    我刚刚编写了我的第一个 Haskell 程序 但有一个我无法理解的错误 我认为这是对的 因为我只是像书上的例子一样写的 有人可以帮我吗 main do putStrLn Hello what s your name name lt getL
  • 有趣的正则表达式 - 匹配字符数等于 2^n 的单词

    嘿 我一直在寻找有关正则表达式的反思主题 我想要一个正则表达式来匹配单词列表中包含 2 n 个字符的每个单词 其中 n 是自然数 为了简单起见 我们假设一个单词只是一个序列o我们还假设该列表由单词组成 后跟单词所包含的字符数 并用空格分隔当
  • Swift 3:单例的属性观察器

    我想知道是否有任何方法可以观察单例类的某个属性的变化 就我而言 对于 Realm 我有这样的东西 class User Object dynamic var name String dynamic var email String dyna
  • iOS8 照片框架:如何获取 PHAsset 的名称(或文件名)?

    我试图使用获取图像名称PHAssets 但我找不到文件名的元数据或任何获取图像名称的方法 有其他方法获取文件名吗 我知道这个问题已经得到解答 但我想我会提供另一种选择 extension PHAsset var originalFilena
  • 在视图中使用临时表

    我真的很想创建一个视图 我知道您不能在 MSSQL2005 视图中使用临时表 在不重写 sql 的情况下 我是否遗漏了任何明显的东西 备份计划是使用存储过程 Cheers select into temp from vwIncidents
  • 如何在Java中为Android设置HttpResponse超时

    我创建了以下函数来检查连接状态 private void checkConnectionStatus HttpClient httpClient new DefaultHttpClient try String url http xxx x
  • Jupyter 笔记本自动完成显示重复选项

    Jupyter notebook s autocomplete seems working but somehow it will show duplicate options for the method For example belo
  • 通过 CORS 使用 Ajax 请求在浏览器上设置 Cookie

    尝试实现 ajax 登录 注册过程 没有带有身份验证的刷新站点 使用 cookie 来保存状态 我以为我现在就可以了 但由于某种原因 浏览器在从服务器取回 cookie 后不会设置 cookie 有人可以帮忙吗 以下是请求和响应标头 Req
  • 使用mocktail包进行单元测试时,类型“Null”不是类型“Future”的子类型

    我们如何验证函数内的方法是否被调用 我这里有一个示例代码 class MockService extends Mock implements Service class MockRepository extends Mock impleme
  • 更改 Bootstrap 3 中折叠导航栏上的菜单顺序

    我有一个 Bootstrap 3 导航栏 有两个右对齐 ul 给我这个的部分 当移动菜单折叠时 我得到以下信息 我有两个与折叠菜单相关的问题 1 如何让按钮出现在折叠菜单的底部而不是顶部 2 如何更改折叠菜单中按钮的样式 而不影响水平菜单中
  • 如何有效地用逗号连接列表并在最后一个元素之前添加“and”

    我一直在经历自动化无聊的事情 http automatetheboringstuff com 并遇到了一个名为 Comma Code end of第4章 https automatetheboringstuff com chapter4 您