【问题标题】:More elegant if statement handling更优雅的 if 语句处理
【发布时间】:2021-11-12 13:39:14
【问题描述】:

假设我有一个包含 N 个元组的列表,其中元组首先包含一个字符串,然后是一个浮点数,例如 ('cat', 0.5)。它们的组织方式使得它们在列表中出现的越早,第二个元素的浮动大小就越大。

假设我要完成以下工作:

  1. 测试元组列表是否只包含一个元组
  2. 测试元组列表的第一个元素是否为字符串
  3. 如果元组列表包含多个元组,第一个元组的浮点数是否至少是第二个元组的浮点数的两倍?

如果 1、2 为真或 2、3 为真,则测试通过。

我尝试编写如下代码:

if isinstance(tuples[0][0],str):
    if len(tuples) > 1:
        if tuples[0][1] > 2 * tuples[1][1]:
            print('Success')
    elif len(tuples) == 1:
        print('Success')

有没有一种代码不那么臭的方法,而不必对成功条件进行两次编码?

【问题讨论】:

  • 增加一个测试通过计数器,如果大于或等于两个,那么你就成功了
  • if <2> and (<1> or <3>)

标签: python list tuples


【解决方案1】:

您可以使用变量来存储最后处理的浮点数的值,以检查您的第三个条件(第 N 个元组的浮点数 >= 第 N+1 个元组的浮点数)。

如果将此类变量初始化为无穷大,则可以避免显式检查第一个条件(元组列表仅包含一个元组)。

所以在您的代码中,您只需检查第二个条件(元组列表的第一个元素是一个字符串)和第三个条件:

def check(tuples):

  last_value = float("inf")

  for text, value in tuples:

    if not isinstance(text, str):
      return False

    if last_value < value * 2:
      return False

    last_value = value

  return True

if check(tuples):
  print("Success")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-25
    • 1970-01-01
    • 1970-01-01
    • 2020-07-30
    • 2017-05-10
    相关资源
    最近更新 更多