У меня есть список списков, где мне нужно переместить второй и третий элементы, которые будут помещены в первый элемент (который является списком) на первом и последнем месте соответственно. Затем мне нужно удалить элементы, которые когда-то использовались.
У меня уже есть цикл for, который будет работать для первого экземпляра, но я не уверен, как безопасно удалить эти элементы и перейти к следующему набору и повторить операцию. Я понимаю, что циклы for не подходят для удаления элементов.
Примерный список
x = ['string 1', 1, 2, 'string 2', 0, 'string 3'], 'new string 1', 'new string 2', ['string 3', 19, 2, 'string 4', 0, 'string 5'], 'new string 3', 'new string 4', ['string 6', 1, 2, 'string 7', 0, 'string 8'], 'new string 5', 'new string 6', ['string 9', 19, 2, 'string 10', 0, 'string 11']
где new string 1
следует помещать перед string 1
, а new string 2
добавляется к списку, тогда удаляются все первые 10 значений (технически первые 3 элемента, поскольку первый — это список).
Следующий цикл for достигает этого для одного экземпляра
def sorting_insert_list(x):
x = list(x)
for i in range(len(x)):
keyword = x[1]
location = x[2]
x[0].append(location)
x[0].insert(0, keyword)
print(x)
и возвращает следующие результаты
[['new string 1', 'string 1', 1, 2, 'string 2', 0, 'string 3', 'new string 2'], 'new string 1', 'new string 2', ['string 3', 19, 2, 'string 4', 0, 'string 5'], 'new string 3', 'new string 4', ['string 6', 1, 2, 'string 7', 0, 'string 8'], 'new string 5', 'new string 6']
Окончательный список, который мне нужен, будет выглядеть следующим образом:
sorted_list = ['new string 1', 'string 1', 1, 2, 'string 2', 0, 'string 3','new string 2',] ['new string 3''string 3', 19, 2, 'string 4', 0, 'string 5', 'new string 4',], ['new string 5','string 6', 1, 2, 'string 7', 0, 'string 8','new string 6']
Возможно, стоит отметить, что я буду делать это для огромного списка, я просто упростил данные, чтобы показать их в качестве примера. Спасибо.
Добавление попытки включить дату, которая появляется в списке после new string 2
и в позиции x[3] :
def sorting_insert_list(x):
result = []
for i in range(0, len(3)):
keyword = x[i + 1]
location = x[i + 2]
date = insert_values[i + 3]
result += [[keyword] + x[i] + [location] + date]
x = result
print(x)
Я думаю, что лучший способ сделать это — отказаться от исходного списка x
и создать новый список, чтобы составить свой результат, вместо удаления 2-го и 3-го элементов из списка, вы можете попробовать это:
# list comprehension, more pythonic
def sorting_insert_list(x):
x = [[x[i+1]] + x[i] + [x[i+2]] for i in range(0, len(x) // 3 * 3, 3)]
print(x)
# base on your version
def sorting_insert_list(x):
result = []
for i in range(0, len(x) // 3 * 3, 3):
keyword = x[i + 1]
location = x[i + 2]
result += [[keyword] + x[i] + [location]]
x = result
print(x)
тестовое задание:
x = [['string 1', 1, 2, 'string 2', 0, 'string 3'], 'new string 1', 'new string 2',
['string 3', 19, 2, 'string 4', 0, 'string 5'], 'new string 3', 'new string 4',
['string 6', 1, 2, 'string 7', 0, 'string 8'], 'new string 5', 'new string 6',
['string 9', 19, 2, 'string 10', 0, 'string 11']]
sorting_insert_list(x)
выход:
[['new string 1', 'string 1', 1, 2, 'string 2', 0, 'string 3', 'new string 2'], ['new string 3', 'string 3', 19, 2, 'string 4', 0, 'string 5', 'new string 4'], ['new string 5', 'string 6', 1, 2, 'string 7', 0, 'string 8', 'new string 6']]
кстати, len(x) // 3 * 3
используется для игнорирования хвоста меньше 3, как в вашем примере. Если вы уверены len(x) % 3 == 0
, вы можете просто использовать len(x)
Надеюсь, что это поможет вам, и прокомментируйте, если у вас есть дополнительные вопросы. :)
Спасибо большое работает отлично! Я выбрал второй пример, так как мне было немного легче понять! также я использовал len(x)
, как вы упомянули. Спасибо еще раз!
Я пишу вторую версию на случай, если вы не знакомы с python. рад, что это помогает вам. :)
Мне также нужно добавить значение date
в конец списка, но я получаю следующую ошибку TypeError: can only concatenate list (not "datetime.date") to list
. Я обновляю код выше, чтобы показать, что я делаю, чтобы попытаться достичь этого.
используйте append
вместо +=
может вам помочь
Извините, обновил список
x