每次迭代为单个变量分配不同的值

Assignment of Different Values to Single Variable each Iteration

有一个列表s和两个变量mn:

s = [3, 'abc', '123', 'def', '456', 'ghi', '789']

s[0] 是 int 类型。它表示将以下值分配给 m 和 n 的迭代次数。 前任: 这个 s 列表应该迭代 3 次,如 s[0] 所示。每次迭代都应该从 s 到 m 和 n 分配一个新值。

第一次迭代,应该分配m和n

m = 'abc'
n = '123'

第二次迭代,

m = 'def' 
n = '123'` 

第三次迭代,

m = 'ghi' 
n = '789' 

到目前为止我尝试了什么 -

s = [3, 'abc', '123', 'def', '456', 'ghi', '789']

count = 0
i = 0
j = 2
while count < s[0]:
     m = s[i+1]
     n = s[j+1]
     print(m)
     print(n)
     count += 1
     i += 1
     j += 1

我的输出是

abc
def
123
456
def
ghi

而不是

abc 
123
def
456
ghi
789

请帮助我构建所需的逻辑来解决这个问题。

你可以只使用一个迭代器,你根本不需要管理索引:

it = iter(s)
for _ in range(next(it)):
    m, n = next(it), next(it)
    print(m)
    print(n)

或使用索引访问:

i, j = 1, 2
for _ in range(s[0]):
    m, n = s[i], s[j]
    print(m)
    print(n)
    i, j = i+2, j+2

我认为我们可以通过说在我们的循环中循环计数器等于 s[0]*2 来简化这一点。这样我们就可以定义循环步长为2。但这意味着 s[0] 必须 小于或等于 (len(s) -1)/2

>>> s = [3, 'abc', '123', 'def', '456', 'ghi', '789']
>>> for i in range(1, s[0]*2, 2):
    print(s[i])
    print(s[i+1])


abc
123
def
456
ghi
789

此范围的参数是:

  • 第一个索引 = 1
  • 最大索引 = 6
  • 每步递增 = 2

所以第一个循环我们得到 i = 1 并且我们打印索引 12,然后索引变成 3 然后我们打印 34,依此类推。

你可以这样做:

s = [3, 'abc', '123', 'def', '456', 'ghi', '789']
i = 1
count=1
while  count<=s[0]:
      m = s[i]
      n = s[i+1]
      print(m)
      print(n)
      i += 2
      count+=1

索引 i、j 必须两两递增,另一方面,只需要其中一个,因为 j 的值始终为 i + 1。

当你让它在一个变量 == 0 的地方工作时很方便。然后分配 m 和 n 你可以按照下面的例子理解:

count = 0
for itervar in [3, 41, 12, 9, 74, 15]:
    count = count + 1
print 'Count: ', count

然后

total = 0
for itervar in [3, 41, 12, 9, 74, 15]:
    total = total + itervar
print 'Total: ', total

您可以增加所需的迭代次数。