首页 > 解决方案 > 循环遍历列表直到语句为真

问题描述

我正在尝试在python中逐项循环列表

我还想检查 x 是否是项目,如果是,我想将结果存储到一个新列表中,然后打印它。

这是我尝试过的代码

from random import randint
s = "test"
#transform to asci
l = ''.join(str(ord(c)) for c in s)
#transform to 1 digit numbers
n = [l[i:i+1] for i in range(0, len(l), 1)]
#make a empty list
r = []
#fill the empty list with new data
while True:
    a = randint(0,9)
    b = randint(0,9)
    for z in n:
        if a+b == z:
            print(''.join(str(a)+str(b)))
            break
        else:
            print('x')
            break


我想要做的基本上是获取 ascii 代码并将其拆分为 1 位数字然后这些数字会像 1 = 0+1 = 01 2 = 1+1 = 11 我想遍历列表并检查那些陈述为真,然后将它们保存到新列表中

标签: pythonlist

解决方案


我认为你的意图在你问题的最早版本中是最清楚的。据我所知,您希望继续生成随机数字,直到找到两个加起来等于列表中的一个数字为止n。您的原始代码几乎就在那里,除了您将整数与字符串进行比较,并且您需要一种方法来打破这两个循环。下面的代码应该适合你。

from random import randint

n = ['1','2','3','5']
z = []
# set a sentinel to break out of both loops when needed
done = False
while not done:
    a = randint(0,9)
    b = randint(0,9)
    for x in n:
        if str(a+b) == x:
            z.append(''.join(str(a)+str(b)))
            # break out of both loops
            done = True
            break
print(z)
# ['21'] or something else

我已转换a+b为字符串,但您可能更愿意将条目转换为n更早的整数。

由于内部循环仅用于检查当前数字是否匹配,因此可以将其替换为 Python 的in运算符,如下所示:

from random import randint

n = ['1','2','3','5']
z = []
while True:
    a = randint(0,9)
    b = randint(0,9)
    if str(a+b) in n:
        z.append(str(a)+str(b))  # equivalent to ''.join(str(a)+str(b))
        break
print(z)
# ['50'] or something else

更新

您在评论中提到(现在缺少)您想为n. 要使用您开始的代码执行此操作,您需要颠倒循环的顺序:外部循环遍历 的每个元素,n内部循环重复,直到找到合适的数字对:

from random import randint
n = ['1','2','3','5']
z = []
for x in n:
    while True:
        a = randint(0, 9)
        b = randint(0, 9)
        if a+b == int(x):
            z.append(str(a)+str(b))
            break
print(z)
# ['01', '20', '12', '23'] or similar

使用此代码,每对的第一个数字将均匀分布在 0 之间x,第二个数字将始终等于x减去第一个数字。直接生成这样的对更有效,而不需要内部循环:

from random import randint
n = ['1','2','3','5']
z = []
for x in n:
    a = randint(0, int(x))
    b = int(x) - a
    z.append(str(a)+str(b))
print(z)
# ['01', '02', '21', '05'] or similar

推荐阅读