Make a new list with a certain order, but skip some indices on if condition

Question:

I am trying to make an new list in a certain order that relies on another list. It should make an list with an order i specifed, but if an item in that other list is x it should skip that index and continue with the order without skipping an item in the order.

start:

days_list = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday']
x = 'rest'
order = ['a', 'b', 'c']

after i changed the days_list:

changed_days_list = ['sunday', 'monday', x, 'wednesday', x, 'friday', x]

The output should look like this:

example_output = ['a', 'b', 'rest', 'c', 'rest', 'a', 'rest']

I have tried with for and while loops, but i can’t figure it out. Any thoughts?

Asked By: Jompert

||

Answers:

You could use for-loop to check every value on changed_days_list and put new value from order when it is not rest. And you could use itertools.cycle() to get value from order.

import itertools

x = 'rest'

order = ['a', 'b', 'c']
changed_days_list = ['sunday', 'monday', x, 'wednesday', x, 'friday', x]

cycle = itertools.cycle(order)

result = []

for item in changed_days_list:
    if item == x:
        result.append(item)
    else:
        next_value = next(cycle)
        result.append(next_value)
        
print(result)

Result:

['a', 'b', 'rest', 'c', 'rest', 'a', 'rest']
Answered By: furas
days_list = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday']
x = 'rest'
changed_days_list = ['sunday', 'monday', x, 'wednesday', x, 'friday', x]
order = ['a', 'b', 'c']

output_list = []
order_index = 0

for i in changed_days_list:
    if order_index>len(order)-1:
        order_index = 0

    if i == x:
        output_list.append('rest')
    
    elif i != x:
        output_list.append(order[order_index])
        order_index+=1

print(output_list)

Output:

['a', 'b', 'rest', 'c', 'rest', 'a', 'rest']
Answered By: Kirito
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.