数字字符串转换为int并添加到列表中(优化问题)

问题描述 投票:2回答:2

我设法使代码正常工作,但我相信可以对其进行优化……很多。

输入是一串数字,用空格分隔。类似于-4 2 8 61 2 3 4 5 6 7

必须找到与该condition a + b == c匹配的3个数字。当'b'始终位于'a'for every time the condition is met的右侧时,以以下格式-'a + b == c'在控制台上打印数字。如果没有一个匹配项,则打印“否”。

'b'的唯一限制是与'a'至少有1个索引。

这是我想出的。

lineOfNums = input('Line of numbers: ') # User input: example - 4 2 6 8
arrNums = lineOfNums.split()
conMet = False # Is the condition met at least once

for a in range(0, len(arrNums)):
    for b in range(a + 1, len(arrNums)):
        for c in range(0, len(arrNums)):
            if int(arrNums[a]) + int(arrNums[b]) == int(arrNums[c]):
                print(f'{arrNums[a]} + {arrNums[b]} == {arrNums[c]}')
                conMet = True

if conMet == False: print('No')
python arrays
2个回答
1
投票

首先,在创建arrNum时执行一次整数转换,而不是每次循环都执行。

arrNum = [int(x) for x in lineOfNums.split()]

外部循环只需要转到len(arrNums)-1,因为它需要在其右侧留出空间给B

for a in range(0, len(arrNums)-1):
    for b in range(a + 1, len(arrNums)):
        for c in range(0, len(arrNums)):
            if arrNums[a] + arrNums[b] == arrNums[c]:
                print(f'{arrNums[a]} + {arrNums[b]} == {arrNums[c]}')
                conMet = True

0
投票

您可以用itertools完成,当然首先要转换为int

from itertools import combinations

# Convert to int
arr= [int(i) for i in arrNums]

# Get all the combinations
psums = {sum(i): i for i in combinations(arr, 2)}

# Then loop once
for i, v in enumerate(arr):
    if v in psums:
        print(f'{psums[v][0]} + {psums[v][1]} == {v}')
© www.soinside.com 2019 - 2024. All rights reserved.