如何在循环中迭代这个列表?我是一名初学者,Python是我的第一门语言

-1 投票
5 回答
137 浏览
提问于 2025-04-12 22:32

Zybooks 指令

数据列表 data_list 包含从输入中读取的整数,表示一系列数据值。对于 data_list 中从 1 到倒数第二个索引的每个索引 i:

如果索引 i 处的元素比前一个元素和后一个元素都大,那么这个元素就是一个“预感”。如果索引 i 处的元素是一个“预感”,那么就输出 'Hunch: ',后面跟着前一个元素、当前元素和后一个元素,每个元素之间用空格隔开。

示例

例如:如果输入是 12 14 72 52,那么输出是:

  • 序列: [12, 14, 72, 52]
  • 预感: 14 72 52

Zybooks 代码

tokens = input().split()

data_list = []
for token in tokens:
    data_list.append(int(token))

print(f'Sequence: {data_list}')

我完成 zybooks 代码的代码

for i, data in enumerate(data_list[1: -2]):
    if data_list[i] > data_list[i - 1] and data_list[i] > data_list[i + 1]:
        print(f"Hunch: {data_list[i - 1]} {data_list[i]} {data_list[i + 1]}")

使用 12, 14, 72, 52 的输出##

  • 序列: [12, 14, 72, 52]

5 个回答

0

更简洁的输入方式,以及四种解决方案。

seq = list(map(int, input().split()))

for a, b, c in zip(seq, seq[1:], seq[2:]):
    if a < b > c:
        print('Hunch:', a, b, c)

a, b = seq[:2]
for c in seq[2:]:
    if a < b > c:
        print('Hunch:', a, b, c)
    a, b = b, c

a = b = None
for c in seq:
    if None is not a < b > c:
        print('Hunch:', a, b, c)
    a, b = b, c

b = float('nan')
for c in seq:
    if c < b > a:
        print('Hunch:', a, b, c)
    a, b = b, c

在线尝试这个!

0

你在问题中没有提到列表里会有多少组提示。也就是说,是只有一组提示,还是有多组提示。假设列表里会有多组提示,我给出了一个解决方案。你可以根据自己的需求修改代码。理解一下如何使用f-string,然后相应地调整代码。

l = [12, 14, 72, 52, 22, 78, 33] 
hunches = []

# Index based iteration till the last but one element
for i in range(1,len(l)-1):

    #if the number is greater than both previous and next number, make a list
    if l[i-1] < l[i] > l[i + 1]:
        sub = f'{l[i-1]} {l[i]} {l[i+1]}'

        # append this list to the list hunches
        hunches.append(sub)

print(f'Hunches: {hunches}') #Output: Hunches: ['14 72 52', '22 78 33']
1

enumerate 这个函数总是从零开始计数,除非你给它一个 start 参数,所以当你对列表进行切片后,索引就不再代表原来的位置了。

因为你没有用到 data 这个变量,所以直接使用 range 就可以了。

for i in range(1, len(data_list) - 1):
    if data_list[i - 1] < data_list[i] > data_list[i + 1] :
        print("Hunch: " + ' '.join(tokens[i-1:i+2]))

撰写回答