遍历元组的所有行,并在满足条件后返回值

时间:2020-07-22 18:41:16

标签: python python-3.x

这种玩具示例代表了一个问题,我已经从模拟程序包解析数据。我想遍历一个元组,如果满足特定条件,则打破循环并返回与该特定行相对应的时间步长。在下面的示例中,索引0代表这些时间步长。

from random import randint

t = list(range(1,11))
a = [randint(1, 10) for i in range(0, 10)]
b = [randint(1, 10) for i in range(0, 10)]
c = [randint(1, 10) for i in range(0, 10)]
d = [randint(1, 10) for i in range(0, 10)]
e = [randint(1, 10) for i in range(0, 10)]

for i in zip(t,a,b,c,d,e):
    print (i)

(1, 8, 5, 5, 3, 4)
(2, 2, 9, 5, 9, 1)
(3, 9, 3, 1, 6, 3)
(4, 9, 6, 7, 8, 3)
(5, 2, 7, 6, 8, 10)
(6, 6, 6, 8, 9, 6)
(7, 1, 8, 1, 8, 3)
(8, 1, 1, 1, 7, 5)
(9, 6, 10, 7, 4, 6)
(10, 5, 2, 6, 3, 8)

所以可以说我想返回数字10出现的第一步。知道这是时间步骤5和10是行中的最后一个,我可以对此进行硬编码:

for i in zip(t,a,b,c,d,e):
    if i[5] == 10:
        print(i[0])
5

我试图通过这种方式解决问题,但是我无法弄清楚哪里出了问题,欢迎任何指针。

for i in zip(t,a,b,c,d,e):
    if i[1:] == 10:
        print(i[0])

5 个答案:

答案 0 :(得分:1)

您可以使用此方法

const jsonStr = '{"formvalue1": {"title": "sdf", "tname": "sdff", "taddress": "dfsdf"}}'
let obj = JSON.parse(jsonStr);
obj = obj.formvalue1;
console.log(obj)

答案 1 :(得分:1)

替换

for i in zip(t,a,b,c,d,e):
    if i[1:] == 10:
        print(i[0])

使用

for i in zip(t,a,b,c,d,e):
    if 10 in i:
        print(i[0])
        break

答案 2 :(得分:1)

我建议使用random.seed(),以使示例可重复(tutorial)。

从那里开始,就像您所做的那样:

from random import randint
import random

random.seed(42)
ten_numbers = range(0, 10)
t = list(range(1,11))
a = [randint(1, 10) for i in ten_numbers]
b = [randint(1, 10) for i in ten_numbers]
c = [randint(1, 10) for i in ten_numbers]
d = [randint(1, 10) for i in ten_numbers]
e = [randint(1, 10) for i in ten_numbers]

可以继续:

for index, each in enumerate(zip(t,a,b,c,d,e)):
    if any([EACH == 10 for EACH in each]):
        print(index)
        break
else:
    print("10 couldn't be found")

我们使用了for-else子句。

答案 3 :(得分:1)

就像其他所有人一样,在您的model.output(x_2d); 语句中添加一个break语句。那会让您跳出循环。

if

但是,作为奖励,如果您想知道for i in zip(t, a, b, c, d, e): if 10 in i[1:]: print(i[0]) break 中是否从来没有10,可以在for循环的底部添加一个else语句:

i[1:]

要了解有关for i in zip(t, a, b, c, d, e): if 10 in i[1:]: print(i[0]) break else: # If the loop never exited abnormally print("10 was never in i[1:]") 语法的更多信息,请查看this StackOverflow帖子。

答案 4 :(得分:0)

您可以使用break调用来在满足条件时停止循环。

list = [1,2,3,4,5,6,7,8,9,10]
target = 5
time_step = 0

for time_step, value in enumerate(list):
    if value == target:
        break

如果要处理多个列表,建议您检查哪个列表具有要搜索的值,然后提取其索引。

lists = [[1,2,3],
         [4,5,6],
         [7,8,9]]

target = 5 
time_step = 0

for list in lists:
    if target in list:
        for time_step, value in enumerate(list):
            if value == target:
                break