【问题标题】:Python check list evennessPython 检查列表均匀度
【发布时间】:2020-03-19 16:57:42
【问题描述】:

有没有一种pythonic方法可以找出哪个数字的均匀度与其他数字不同?

例如:

输入:"2 4 7 8 10" => 输出:3 // 第三个数字是奇数,其余数字是偶数

input: "1 2 1 1" => 2 // 第二个数字是偶数,其余数字是奇数

下面是我的方法,其中numbersstr 的输入:



def evenness(numbers):

    bool_number = list(map(lambda i: i%2==0, map(lambda i: int(i), numbers.split(" ")))) 

    if bool_number.count(True) == 1:
        return bool_number.index(True)+1
    else:
        return bool_number.index(False)+1

谢谢

【问题讨论】:

  • '1 3 5 2 4 8' 的输出是什么?
  • 嗨@Ch3steR,目前我没有相同数量的偶数和奇数的测试用例,如果字符串中有多个偶数/奇数。但是感谢您的提醒,我也必须涵盖它们。
  • 您可以edit该问题并添加所有相关信息。
  • 那么您是否希望所有索引在其均匀度上都处于“关闭”状态。例如:“2 4 7 8 9” 偶数比奇数多,所以你希望两个索引都是奇数吗?

标签: python python-3.x list list-comprehension


【解决方案1】:

如果您只有一个奇数/偶数差异实例,您可以将所有数字转换为 1(表示奇数)和 0(表示偶数),并根据您是否有超过一个奇怪的:

s     = "2 4 7 8 10"
odds  = [int(n)&1 for n in s.split()]
index = odds.index(sum(odds)==1)+1

print(index) # 3

【讨论】:

    【解决方案2】:

    你可以试试这个函数,它会返回唯一与其他不同的项目的索引,如果出现多于一个或零个,那么它将返回 -1

    def evenness(numbers):
        res = list(filter(lambda x: x.count(0) == len(x) -1, [[i if int(n) % 2 else 0 for i, n in enumerate(numbers.split(" "))], [i if not int(n) % 2 else 0 for i, n in enumerate(numbers.split(" "))]]))
        return -1 if len(res) != 1 else sum(res[0]) 
    

    【讨论】:

      猜你喜欢
      • 2012-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-24
      • 1970-01-01
      相关资源
      最近更新 更多