Вместо того чтобы использовать много циклов, вы можете попробовать просто объединить фрагменты:
def query(lst, t, start, end):
# Convert to proper zero-indexed index
start -= 1
if t == '1':
return lst[start:end] + lst[:start] + lst[end:]
elif t == '2':
return lst[:start] + lst[end:] + lst[start:end]
# Get the input however you want
N, M = map(int, input().split())
arr = list(map(int, input().split()))
assert len(arr) == N
for _ in range(M):
t, start, end = input().split()
arr = query(arr, t, int(start), int(end))
print(abs(arr[0] - arr[N - 1]))
print(*arr)
Вход:
8 4
1 2 3 4 5 6 7 8
1 2 4
2 3 5
1 4 7
2 1 4
Выход:
1
2 3 6 5 7 8 4 1
В зависимости от того, как вы хотите работать со своим скриптом, у вас есть два варианта. Если вы хотите, чтобы команды блокировались и ничего не делали во время выполнения, вы можете просто использовать subprocess.call
.
#start and block until done
subprocess.call([data["om_points"], ">", diz['d']+"/points.xml"])
Если вы хотите что-то делать во время выполнения или загружать данные в stdin
, вы можете использовать communication
после вызова popen
.
#start and process things, then wait
p = subprocess.Popen([data["om_points"], ">", diz['d']+"/points.xml"])
print "Happens while running"
p.communicate() #now wait plus that you can send commands to process
Как указано в документации, wait
может заблокироваться, поэтому рекомендуется обмен данными.
Сила popen
для не продолжения до всего вывода читается путем выполнения:
os.popen(command).read()