我想从数组中删除值x
,并且我有以下约束:
这样
a = [1, 2, 'x', 3, 4, 5]
变为
[1, 2, 3, 4, 5, None]
只有一个x
的案例是微不足道的,我只是将所有内容都移到了一个位置:
def removeSingleElement(value, array):
i = 0
while i < len(array)-1:
if array[i] == value:
for val in array[i:-1]:
array[i] = array[i+1]
i += 1
else:
i += 1
array[-1] = None
return array
但如何处理重复值的数组?
a = [1, 'x', 2, 3, 'x', 4]
应该成为
a = [1, 2, 3, 4, None, None]
(我的想法是我不能调整数组的大小,所以我想要移动左边的所有内容并用Null
的值填充其余部分。)
免责声明:这不是一个Python问题,我正在寻找通用算法,它恰好发现Python方便表达这个想法;)
答案 0 :(得分:2)
你需要两个指数,一个用于阅读和写作:
def remove_element(value, array):
reading_idx = writing_idx = 0
while reading_idx < len(array):
if array[reading_idx] != value:
array[writing_idx] = array[reading_idx]
writing_idx += 1
reading_idx += 1
while writing_idx < len(array):
array[writing_idx] = None
writing_idx += 1
答案 1 :(得分:2)
假设您可以提前知道数组的长度并存储计数器,则可以进行以下工作:
def remove_element(value,array):
shift = 0
for index in xrange(len(array)):
try:
array[index] = array[index + shift]
while array[index] == value:
shift += 1
array[index] = array[index + shift]
except IndexError:
array[index] = None
答案 2 :(得分:0)
这可能是作弊,但是......
def remove(value, array):
try:
while True:
del(array[array.index(value)])
array.append(None)
except ValueError:
pass
return array
答案 3 :(得分:0)
<强>代码:强>
def removeSingleElement(value, array):
"""
Remove value from the input array.
Input parameters:
value: Remove Value.
array: Input array.
Output parameters:
return array.
"""
#- Length of array.
array_length = len(array)
i = array_length - 1
#- Iterate Array from higher index to Lower index.
while i > -1:
#- Check Current item value with remove value.
if array[i] == value:
#- Remove Value from the input list.
array.pop(i)
#- Append None value to input list.
array.append(None)
#- Decrement index value by 1
i -= 1
return array
remove_item = 'x'
input_array = ['x', 1, 2, 3, 'x', 4, 5, 'x']
output_array = removeSingleElement(remove_item, input_array)
print "Output:", output_array
<强>输出:强>
vivek@vivek:~/Desktop/stackoverflow$ python remove_item.py
Output: [1, 2, 3, 4, 5, None, None, None]