有没有一种更简单、更节省内存的方法来解决这个“磁铁”问题?

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

这是我对磁铁问题的解决方案,其中给你一个数字 n 并输入 n 行“10”或“01”磁铁。磁铁在相反的两极相互连接,您的任务是在所有连接或未连接后返回数字 g 或一组磁铁。

from itertools import tee

n = int(input())
magnets = []

for i in range(n):
    magnet = input()
    magnets.append(magnet)

def pairwise(iterable):
    a, b = tee(iterable)
    next(b, None)
    return zip(a, b)

m = iter(magnets)

g = 1 # there will always be at least 1 group

for x, nxt in pairwise(m):
    if x != nxt:
        g += 1
    else:
        pass

print(g)

我不一定关心将其缩短到不可读的地步,我只是好奇是否有一种更简单的方法来以更简单的方式比较每个 i 和 i+1。

python loops
2个回答
0
投票

是的,总会有办法的! (如果我理解正确的话,当然描述的问题)

使用你的语法:

n = int(input())
magnets = [input() for _ in range(n)]

g = 1  # there will always be at least 1 group

for x, nxt in zip(magnets, magnets[1:]):
    if x != nxt:
        g += 1

print(g)

0
投票

关于内存:您不必存储所有磁铁,只需存储前一个即可:

prev = None
groups = 0 

n = int(input("count: "))
for i in range(n):
    magnet = input("either 01 or 10: ")
    if magnet != prev:
        groups += 1
        prev = magnet

print(groups)
© www.soinside.com 2019 - 2024. All rights reserved.