如何使用for循环和append从预先存在的列表中删除项?

2024-04-19 01:23:51 发布

您现在位置:Python中文网/ 问答频道 /正文

基本上,我要做的是在满足条件时删除列表中的值。你知道吗

条件基于值在列表中的位置,这是函数定义中remove\u position的意思。下面的代码是我目前所拥有的代码,我正在使用python3.6.0。本例中的列表来自一个外部python文件,该文件从另一个python导入函数,它是:

str_list5 = ['w', 'i', 'n', 'g']
new_list = list_function.remove_value(str_list5, 2)
print(new_list)
new_list = list_function.remove_value(str_list5, -1)
print(new_list)
new_list = list_function.remove_value(str_list5, 10)
print(new_list)

我要做的是在一个算术函数中使用上面的remove\u position值,它将删除与函数结果相对应的项。你知道吗

def remove_value(my_list, remove_position):
    newlist = []
    count = 0

    for item in my_list:
        if remove_position < count:
            newlist.remove(item)

        if remove_position > count:
            newlist.remove(item)

    return newlist

我想要的结果是:

remove_value Test
['w', 'i', 'g']
['i', 'n', 'g']
['w', 'i', 'n']

Tags: 函数代码列表newvaluecountpositionfunction
3条回答

试试这个

    def remove_value(my_list, remove_position):
    my_list.pop(remove_position)

    return my_list

str_list5 = ['w','i','n','g']
new_list = remove_value(str_list5, 2)
print(new_list)

首先list对象是mutable,当您在函数内部更改它们时,原始对象也会更改,因此如果您在remove_value中使用list.remove方法,您的str_list5也会丢失元素。你知道吗

我建议你创建新的对象,而不是改变旧的对象。 我们可以写这个

def remove_value(my_list, remove_position):
    result = []
    remove_position = min(max(remove_position, 0), len(my_list) - 1)
    for position, element in enumerate(my_list):
        if position == remove_position:
            continue
        result.append(element)
    return result

或者使用list comprehension

def remove_value(my_list, remove_position):
    remove_position = min(max(remove_position, 0), len(my_list) - 1)
    return [element
            for position, element in enumerate(my_list)
            if position != remove_position]

或者使用listslices遵循@ChihebNexus建议

def remove_value(my_list, remove_position):
    remove_position = min(max(remove_position, 0), len(my_list) - 1)
    return my_list[0: remove_position] + my_list[remove_position + 1:]

那么选择哪一个呢?最后一个版本在我看来更优雅。你知道吗

测试

str_list5 = ['w', 'i', 'n', 'g']
new_list = remove_value(str_list5, 2)
print(new_list)
new_list = remove_value(str_list5, -1)
print(new_list)
new_list = remove_value(str_list5, 10)
print(new_list)

给了我们

['w', 'i', 'g']
['i', 'n', 'g']
['w', 'i', 'n']

你可以这样做:

my_list = ['w','i','n','g']

def remove_value(my_list, position):
    if position >= len(my_list):
        return my_list[:-1]
    elif position < 0:
        return my_list[1:]
    else:
        return my_list[:position] + my_list[position+1:]


# Test
remove_value(my_list, 2)
remove_value(my_list, -1)
remove_value(my_list, 10)

输出:

['w', 'i', 'g']
['i', 'n', 'g']
['w', 'i', 'n']

相关问题 更多 >