Python 中的 for 循环交换效果不佳

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

我有一个长度和值未知的列表。我只想在每一轮看到“B”后面一次“G”时交换。 例如: 我有一个清单

["B", "G", "G", "B", "G"]
我等着
["G", "B", "G", "G", "B"]
但结果=>
['G', 'G', 'B', 'G', 'B']
这是 Codeforces 网站上的问题:https://codeforces.com/problemset/problem/266/B 如果有不清楚的地方,请给我一些建议,以提升我的技能。

我尝试过:

item1, item2 = item2, item1

它交换了上一个示例中的前 3 个字符串,不是我想要的“只有两个字符串”

['G', 'G', 'B'...]
,但我等待了
['G', 'B', 'G'...]
你能明白吗? 这是我的代码:

# If you find 'G' after 'B' swap them and go through the loop without accessing the last items. 
queue_time = list(map(int, input().split()))
queue = queue_time[0]
time = queue_time[-1]
persons = ["B", "G", "G"]

while time > 0:
  for i in range(len(persons)-1):
    if persons[i] == "B" and persons[i + 1] == "G":
      persons[i], persons[i +1] = persons[i +1], persons[i]
    if persons[i + 1]:
      continue
  time -= 1
print(persons)
python for-loop swap
1个回答
0
投票

交换元素后,您希望标记交换的元素。您实际上并不需要为此单独的标记,因为您可以在交换后向前迈出额外的一步:

ppl = list('BGGBG')
just_swapped = False
for i in range(len(ppl - 1)):
    if just_swapped:
        just_swapped = False
        continue
    if ppl[i : i + 2] == ['B', 'G']:
        ppl[i : i+2] = ppl[i+1 : i-1 : -1]
        just_swapped = True

如果您有一个

while
循环而不是
for
循环,您可以删除
just_swapped
并简单地增加索引一次。

© www.soinside.com 2019 - 2024. All rights reserved.