适用于操作列表和删除元素的Python for循环

时间:2019-04-09 09:25:06

标签: python python-3.x

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

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

1 个答案:

答案 0 :(得分: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)

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