Python for loop用于操作列表并在使用后删除元素



我有一个列表列表,我需要将要放入的第一个元素(这是一个列表)分别移动到第一个和最后一个位置。然后,我需要删除使用后的元素。

我已经有一个 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)

希望对您有所帮助,如果您有其他问题,请发表评论。

最新更新