【问题标题】:How to know if a list has an even or odd number of elements如何知道列表是否包含偶数或奇数个元素
【发布时间】:2013-12-09 17:37:41
【问题描述】:

如何确定任意列表中的元素个数是偶数还是奇数。

我尝试list.index() 获取所有索引...但我仍然不知道如何告诉程序什么是偶数,什么是奇数。

【问题讨论】:

  • 可以使用len()内置函数获取列表的元素个数
  • @goncalopp... 但我怎么知道它是偶数的奇数
  • len(your_list) % 2 == 0
  • @dm03514 ...你的代码是什么意思
  • @user3029969:它可以满足您的要求。

标签: python list python-3.x


【解决方案1】:

您可以为此使用内置函数len()

Python Doc -- len()

获取任意列表的长度(元素数量)。

myList = [0,1,2,3,4,5]

if len(myList) % 2 == 0:
    print ("even")
else
    print ("odd")

定义返回布尔值(真或假)的函数。

def is_even(myList):

    if len(myList) % 2 == 0:
        return true
    else:
        return false

main():

    myList = [0,1,2,3]
    theListIsEven = is_even(myList)  # will be true in this example
                                     # because 4 items in myList

    if theListIsEven(myList) == True:
        # do something
    else:
        # do something else

    return 0

取模运算符 % 给出余数。

EX:7 % 2 = 1

  • 2 均分的最接近 7 的数是 6
  • 7 相差 1。
  • 因此,7 % 2 的余数为 1。

EX:4 % 2 = 0

  • 当 n % 2 时,任何偶数 n 将给出 0 作为余数
  • 因为 n 已经被 2 整除

【讨论】:

    【解决方案2】:

    你只需要

    len(listName)
    

    这会给你长度。

    我猜你也可以这样做

    if len(listName) % 2 == 0:
        return True  # the number is even!
    else:
        return False # the number is odd!
    

    【讨论】:

    • 但是我怎么知道它是任意列表的奇数偶数
    • 通过对返回的列表长度应用模数 2。这正是 codehorse 在他的回答中所做的。
    • @user3029969,代码len(listName) % 2 将数组中的元素数除以2并返回余数。如果余数为 0,则元素个数可被 2 整除,即为偶数。如果返回 1,则为奇数。
    • return len(listName) % 2 == 0
    【解决方案3】:
    your_list = [1,2,3,(4,5)]
    
    # modulo operation finds the remainder of division of one number by another.
    if len(your_list) % 2 == 0:
        print "Even Number"
    else:
        print"number is odd"
    

    【讨论】:

      【解决方案4】:
      if len(mylist)%2==0:
           #even
      else:
           #odd
      

      【讨论】:

        【解决方案5】:
        def has_even_length(some_sequence):
            return not len(some_sequence)%2
        
        def has_odd_length(some_sequence):
            return bool(len(some_sequence)%2)
        

        【讨论】:

          【解决方案6】:

          如果你想按位计算,你也可以使用。

          if len(mylist)&1:
              print("odd")
          else:
              print("even")
          

          如果你知道你的列表很可能是奇怪的,这真的很好看。

          if len(mylist)&1:
              print("list was odd")
          elif CheckSomthingElse():
              print("list was even AND CheckSomthingElse was True")
          else:
              print("list was even AND CheckSomthingElse was False")
          

          通过低于 %2 的测试在 python 中哇是更快。 python必须针对它进行优化。在其他一些语言中 & 1 更快。这就是为什么总是测试很重要的原因。

          import timeit
          
          MyListOdd=[1,2,3,4,5,6,7]
          MyListEven=[1,2,3,4,5,6]
          print("MyListOdd  == ",MyListOdd)
          print("MyListEven == ",MyListEven)
          print("len(MyListOdd)  == ",len(MyListOdd))
          print("len(MyListEven) == ",len(MyListEven))
          
          def TestIfEvenBitwise(MyList):
              if len(MyList)&1:
                  return False #Odd
              else:
                  return True #Even
          
          def TestIfEvenModulus(MyList):
              if len(MyList)%2:
                  return False #Odd
              else:
                  return True #Even
          
          print("TestIfEvenBitwise(MyListOdd)  == ",TestIfEvenBitwise(MyListOdd))
          print("TestIfEvenModulus(MyListOdd)  == ",TestIfEvenModulus(MyListOdd))
          print("TestIfEvenBitwise(MyListEven) == ",TestIfEvenBitwise(MyListEven))
          print("TestIfEvenModulus(MyListEven) == ",TestIfEvenModulus(MyListEven))
          
          mysetup = """
          MyListOdd=[1,2,3,4,5,6,7]
          MyListEven=[1,2,3,4,5,6]
          
          def TestIfEvenBitwise(MyList):
              if len(MyList)&1:
                  return False #Odd
              else:
                  return True #Even
          
          def TestIfEvenModulus(MyList):
              if len(MyList)%2:
                  return False #Odd
              else:
                  return True #Even
          """
          
          print("timeit.timeit(setup = mysetup,stmt ='TestIfEvenBitwise(MyListOdd)', number=100000) == ",
                timeit.timeit(setup = mysetup,stmt ='TestIfEvenBitwise(MyListOdd)', number=100000))
          print("timeit.timeit(setup = mysetup,stmt ='TestIfEvenModulus(MyListOdd)', number=100000) == ",
                timeit.timeit(setup = mysetup,stmt ='TestIfEvenModulus(MyListOdd)', number=100000))
          print("timeit.timeit(setup = mysetup,stmt ='TestIfEvenBitwise(MyListEven)', number=100000) == ",
                timeit.timeit(setup = mysetup,stmt ='TestIfEvenBitwise(MyListEven)', number=100000))
          print("timeit.timeit(setup = mysetup,stmt ='TestIfEvenModulus(MyListEven)', number=100000) == ",
                timeit.timeit(setup = mysetup,stmt ='TestIfEvenModulus(MyListEven)', number=100000))
          

          测试结果。

          MyListOdd  ==  [1, 2, 3, 4, 5, 6, 7]
          MyListEven ==  [1, 2, 3, 4, 5, 6]
          len(MyListOdd)  ==  7
          len(MyListEven) ==  6
          TestIfEvenBitwise(MyListOdd)  ==  False
          TestIfEvenModulus(MyListOdd)  ==  False
          TestIfEvenBitwise(MyListEven) ==  True
          TestIfEvenModulus(MyListEven) ==  True
          timeit.timeit(setup = mysetup,stmt ='TestIfEvenBitwise(MyListOdd)', number=100000) ==  0.02574796500000004
          timeit.timeit(setup = mysetup,stmt ='TestIfEvenModulus(MyListOdd)', number=100000) ==  0.022446242000000005
          timeit.timeit(setup = mysetup,stmt ='TestIfEvenBitwise(MyListEven)', number=100000) ==  0.026081517000000054
          timeit.timeit(setup = mysetup,stmt ='TestIfEvenModulus(MyListEven)', number=100000) ==  0.025758655999999935
          

          【讨论】:

            【解决方案7】:

            偶数能被 2 整除。奇数不能。

            len(X) 将得到X 的长度

            如果X的长度能被2整除,则为偶数 如果X 的长度不能被 2 整除,则它是奇数

            len(X)%2 返回除法问题的“余数”

            例如5%2 将返回不为零的1(因为 5 除以 2 是 2 余数为 1),因此它不是偶数。 与 6%4 相同,它会返回 2,因为 6 除以 4 是 1,余数是 2。

            所以len(X)%2 其中X 是您的列表,将返回一个1,表示它是奇数,或一个0 表示它是偶数。

            【讨论】:

              【解决方案8】:

              使用取模运算符 - % 给出余数。要获得偶数,您需要除以 2,例如:

              7 % 2 = 1
              8 % 2 = 0
              

              最pythonic的方法是:

              def is_even(your_list):
                  if not len(your_list) % 2:  # 0 in case of even i.e. No remainder
                      return True
                  else:
                      return False
              

              【讨论】:

                猜你喜欢
                • 2018-11-17
                • 2016-09-01
                • 1970-01-01
                • 1970-01-01
                • 2013-08-05
                • 1970-01-01
                • 2017-04-01
                • 2014-07-26
                • 1970-01-01
                相关资源
                最近更新 更多