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

问题描述:

基本上我想要做的是当条件满足时删除列表中的值。如何使用for循环和通过使用append从预先存在的列表中删除项目?

条件基于列表中值的位置,这是remove_position在函数定义中的含义。下面的代码是我迄今为止所使用的,我正在使用Python 3.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_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'] 
+1

你在用什么语言? –

+0

使用Python 3.6.0 –

+0

您面临的问题是什么? – Lalit

你可以做这样的事情:

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'] 
+1

非常感谢你,这帮了很多! –

+0

如果您需要更多信息,您可以查看[List/tuple/string slicing](http://pythoncentral.io/how-to-slice-listsarrays-and-tuples-in-python/)。 –

试试这个

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) 

列表理解是一个不错的选择

new_list = [x for x in old_list if your_condition] 

具体而言,你可能需要这个

def remove_value(my_list, remove_position): 
    return [my_list[i] for i in range(len(my_list)) if i != remove_position] 

首先的: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

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:] 

所以要选择哪一个@ChihebNexus建议吗?最后的版本看起来更优雅。

测试

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'] 
+0

这绝对是朝着正确方向迈出的一步,但我最终的两个输出使用-1和10作为remove_position的值并且想知道如何解决这个问题。 –

+0

@almight_vizzo:“-1”和“10”背后的逻辑是“remove_position”? –

+0

@almight_vizzo:它应该如何改变才能在my_list中获得有效位置? –