如何使用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']
你可以做这样的事情:
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']
非常感谢你,这帮了很多! –
如果您需要更多信息,您可以查看[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
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]
或以下使用list
slices
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']
这绝对是朝着正确方向迈出的一步,但我最终的两个输出使用-1和10作为remove_position的值并且想知道如何解决这个问题。 –
@almight_vizzo:“-1”和“10”背后的逻辑是“remove_position”? –
@almight_vizzo:它应该如何改变才能在my_list中获得有效位置? –
你在用什么语言? –
使用Python 3.6.0 –
您面临的问题是什么? – Lalit