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

标签 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']

可能值得注意的是,我将针对一个巨大的列表执行此操作,我刚刚简化了数据以作为示例显示。谢谢。

尝试添加合并日期,该日期随后出现在列表中的新字符串 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,并创建一个新列表来组成您的结果,而不是从列表中删除第二个、第三个元素,您可以尝试以下操作:

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

希望对您有帮助,如有疑问请评论。 :)

关于Python for 循环操作列表并删除曾经使用过的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55589385/

相关文章:

python - 有选择地绕过数据类型转换器

python - 两个日期之间的日期数

python - 不想创建一个新的数据库,如果它不存在

python | tkinter : What does tkinter. END 做什么?

python - Python 3.5.3 中相同的字符串怎么可能是不同的对象?

python - 而文本不在汤中 : - not picking up that text is in soup even though it exists

python - 为什么我的质数测试仪中的模数条件不起作用?

Python:函数的单元测试不返回任何东西,但改变对象的状态

Python字典和集合内存分配

安装包后找不到 Python3 pip3 命令(Centos 7)