В диапазоне списка, который содержит интервал (1-59/4), я хочу, чтобы только первый элемент менялся на все 3 строки.
n = 14
lis_num = []
for x in range(n):
lis_num.append('need the logic')
output of lis_num should be like below:
1 1-59/4
2 2-59/4
3 3-59/4
4 1-59/4
5 2-59/4
6 3-59/4
7 ..
8 ..
.....
14 ..
и так далее с 0 по 13 ряд.
Я еще ничего не пробовал, ищу идею, как мы можем к этому подойти.






Вы можете использовать np.arange и оператор по модулю, затем преобразовать в строку и объединить фиксированную часть:
import numpy as np
import pandas as pd
n = 14
out = pd.Series(np.arange(n)%3+1).astype(str)+'-59/4'
# or
out = pd.Series(np.arange(n)%3+1, dtype=str)+'-59/4'
В качестве альтернативы можно использовать np.tile (менее эффективно, но, возможно, более универсально, если у вас произвольные префиксы):
prefixes = ['1', '2', '3']
n = 14
out = pd.Series(np.tile([f'{p}-59/4' for p in prefixes], int(np.ceil(n/3)))[:n])
Или с помощью вашего цикла (не рекомендуется, если вам нужен массив/серия в качестве вывода):
n = 14
lis_num = []
for x in range(n):
lis_num.append(f'{x%3+1}-59/4')
out = pd.Series(lis_num)
Выход:
0 1-59/4
1 2-59/4
2 3-59/4
3 1-59/4
4 2-59/4
5 3-59/4
6 1-59/4
7 2-59/4
8 3-59/4
9 1-59/4
10 2-59/4
11 3-59/4
12 1-59/4
13 2-59/4
dtype: object
Понимание списка должно сделать это -
n=14
fixed_str = "-59/4"
list1 = [f"{i%3+1}{fixed_str}" for i in range(n)]
Выход
['1-59/4',
'2-59/4',
'3-59/4',
'1-59/4',
'2-59/4',
'3-59/4',
'1-59/4',
'2-59/4',
'3-59/4',
'1-59/4',
'2-59/4',
'3-59/4',
'1-59/4',
'2-59/4']
n = 14
lis_num = []
# Initialize a counter to track rows
counter = 1
# Initialize interval
interval = "1-59/4"
# Iterate over the range
for x in range(n):
# Append the current interval to lis_num
lis_num.append(f"{counter} {interval}")
# Increment the counter
counter += 1
# Check if it's time to update the first element
if counter % 3 == 1:
# Update the first element of the interval
interval = "1-59/4"
elif counter % 3 == 2:
# Update the second element of the interval
interval = "2-59/4"
else:
# Update the third element of the interval
interval = "3-59/4"
# Print each element of lis_num on a new line
for item in lis_num:
print(item)
Выход
1 1-59/4
2 2-59/4
3 3-59/4
4 1-59/4
5 2-59/4
6 3-59/4
7 1-59/4
8 2-59/4
9 3-59/4
10 1-59/4
11 2-59/4
12 3-59/4
13 1-59/4
14 2-59/4
Непонятно, каковы входные данные и какой ожидаемый результат?