Python for循环操作列表并删除曾经使用过的元素

问题描述 投票:1回答:1

我有一个列表列表,我需要将第二个和第三个元素分别放在第一个和最后一个位置的第一个元素(列表)中。然后我需要删除一次使用的元素。

我已经有一个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)
python python-3.x
1个回答
2
投票

我认为最好的方法是放弃原始列表x,并创建一个新的列表来组成你的结果,而不是从列表中删除第二,第三个元素,你可以试试这个:

# 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)

希望对您有所帮助,并在您有其他问题时发表评论。 :)

© www.soinside.com 2019 - 2024. All rights reserved.