遍历列表直到语句为真

时间:2019-09-03 19:51:43

标签: python list

我正在尝试在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 我想遍历列表并检查这些语句是否正确,然后将它们保存到新列表中

1 个答案:

答案 0 :(得分:0)

在您提出的问题的最早版本中,我认为您的意图最为明确。据我所知,您希望继续生成随机数字,直到找到两个等于列表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