Python - 增加变量名的数量......?

时间:2017-06-18 01:33:29

标签: python

例如,我正在使用一个带有参数的函数,该函数将a0,a1,a2,a3,a4与b0,b1,b2,b3,b4进行比较。

但我想为所有参数做同样的功能。 例如:

if a0 > b0:
   do this
elif a0 = b0:
   do this
elif a0 < b0:
   do this

因此,我希望a1和b1,a2和b2具有相同的功能......等等。这是否可以通过增量循环或者我必须手动全部写出来?如果问题令人困惑,请告诉我,我可以进行编辑。

以下是我给出的一些代码示例。

a0, a1, a2 = input().strip().split(' ')
a0, a1, a2 = [int(a0), int(a1), int(a2)]

4 个答案:

答案 0 :(得分:1)

假设您的 2参数的功能名称为func_a_b()。例如:

def func_a_b(a, b):
    if a > b:
       print(a, "is greater than", b)
    elif a == b:
       print(a, "is the same as",  b)
    elif a < b:
       print(a, "is less than",    b)    

解决方案:使用可变数量的参数定义一个函数

def func(*arguments):
    half   = len(arguments) // 2
    a_list = arguments[0:half]             # [a0, a1, a2, ...]
    b_list = arguments[half:]              # [b0, b1, b2, ...]

    for a, b in zip(a_list, b_list):       # [(a0, b0), (a1, b1), (a2, b2), ...]
        func_a_b(a,b)                      # Calling your original function in the loop

一切都是。

你可以尝试一下,例如:

a0 = 10
a1 = 11
a2 = 12 
b0 = 20 
b1 = 10
b2 = 12

func(a0, a1, a2, b0, b1, b2)

输出

  

10小于20
  11大于10
  12与12相同

解释:

那么,函数func()做了什么?

在第一个声明中

    half   = len(arguments) // 2

它获取的参数列表(名称为arguments),然后计算项目的数量len ( arguments ),并将其减半(len(arguments) // 2)(通过整数除法(//)来获得整数结果。)

接下来的两个陈述

    a_list   = arguments[0:half]
    b_list   = arguments[half:]

获取函数func()的参数的前半部分和后半部分 (前半部分是您的a0a1a2a3,后半部分是b0b1,{{ 1}},b2。)

最后,循环

b3

会依次调用 for a, b in zip(a_list, b_list): func_a_b(a, b) 对,func_a_b()等对象,这是您的目标

注意:您可以使用更短的表格:

(a0, b0)

答案 1 :(得分:0)

为什么不使用两个列表?

for i in range(len(a)):
    if a[i] > b[i]:
        do this
    elif a[i] == b[i]:
        do this
    elif a[i] < b[i]:
        do this

这要求列表ab包含相同数量的元素。

如果您需要在某些条件下停止,则可以申请break

答案 2 :(得分:0)

你可以创建一个接受两个参数的函数,并且就像它应该做的那样。然后,只需多次调用该函数,如下所示:

def f(a, b):
   if a > b:
      do this
   elif a = b:
      do this
   elif a < b:
      do this

f(a0, b0)
f(a1, b1)
f(a2, b2)
f(a3, b3)
f(a4, b4)

如果将变量存储在列表中以便您可以简单地迭代它,那就更好了。

答案 3 :(得分:0)

您使用的split方法会返回值列表 而不是

a0, a1, a2 = input().strip().split(' ')

您可以使用

aValues = input().strip().split(' ')

要快速将所有值转换为整数,您可以使用list comprehension

aValues = [int(a) for a in input().strip().split(' ')]

这只是遍历split函数创建的列表,并为您提供仅包含每个元素的int形式的列表。

然后,如0605002's answer中所述,您可以遍历函数中的列表并编写一次比较代码。

def (aValues, bValues):
    for i in range(len(aValues)):
        if aValues[i] > bValues[i]:
            #do this
        elif aValues[i] == bValues[i]:
            #do this
        else: #also, you can just put else here because if a is neither bigger nor equal to b, it must be smaller
            #do this

我不确定你的评论中“不断改变论点”是什么意思,但Python中的列表是可变的,所以你可以根据需要改变元素。

aValues[3] += 4 #increase a3 by 4
aValues[4], aValues[3] = aValues[3], aValues[4] #swap a3 and a4
#or whatever else you have to do