我有两个列表:
List_main = ['a','b','c','d','e','f','g','h']
List_sub = ['c','f','d']
我现在将这些列表加入了:
list_joined = ['a','b','c','d','e','f','g','h','c','f','d']
我想从联接列表“ list_joined”中删除List_sub中第一次出现的元素。
我正在寻找的最终输出是获得一个列表,该列表的末尾附加了List_sub
元素。
['a','b','e','g','h','c','f','d']
我尝试了一种方法,从List_main
中找出sub_list元素的索引。
[i for i,x in enumerate(path_stores_new) if x == value ]
然后使用
del list_joined[index]
但是我认为可能会有更好的方法。 有线索吗?
注意:List_main
具有唯一值
答案 0 :(得分:1)
使用列表理解可以轻松完成
一个衬里代码如下所示:
List_main = ['a','b','c','d','e','f','g','h']
List_sub = ['c','f','d']
list_joined = [i for i in List_main if i not in List_sub] + List_sub
编辑:
如果只忽略第一次出现,则上面的代码将忽略所有出现的代码,下面的代码应执行此工作。
List_main = ['a','b','c','d','e','f','g','h']
List_sub = ['c','f','d']
list_joined = [value for ind, value in enumerate(List_main) if value not in List_sub or ind > List_main.index(value)] + List_sub
答案 1 :(得分:0)
您可以先将List_main
转换为dict,删除基于List_sub
的键,然后将其余键与List_sub
结合起来,以便删除{{ 1}}的平均时间复杂度为O(1)(否则在列表中查找和删除元素,每个元素的平均花费为O(n))
List_sub
这将输出:
dict_main = dict.fromkeys(List_main)
for k in List_sub:
del dict_main[k]
print(list(dict_main) + List_sub)
如果您未使用Python 3.7,则可以使用['a', 'b', 'e', 'g', 'h', 'c', 'f', 'd']
代替collections.OrderedDict
。
答案 2 :(得分:0)
或者,您也可以像这样使用内置的var baseClusterer = new KMeans()
.setFeaturesCol("scaledFeatures")
.setPredictionCol("clusters")
.setSeed(0)
2 to 10 map {
baseClusterer = baseClusterer.setK(k)
baseClusterer.fit(scaledDF).computeCost(scaledDF)
}
函数:
filter
这将输出List_main = ['a','b','c','d','e','f','g','h']
List_sub = ['c','f','d']
sub_filter = lambda x: x not in List_sub
list_joined = list(filter(sub_filter, List_main)) + List_sub
。
答案 3 :(得分:0)
我不会做与@Rakesh完全相同的事情,即使我们的答案非常相似,我只是发送我会做的事情。 :)
['a', 'b', 'e', 'g', 'h', 'c', 'f', 'd']
答案 4 :(得分:0)
您可以过滤第一个列表中未包含的元素,然后将结果扩展到第二个列表中:
List_main = ['a','b','c','d','e','f','g','h']
List_sub = ['c','f','d']
list(filter(lambda x : x not in List_sub, List_main)) + List_sub
输出:
['a', 'b', 'e', 'g', 'h', 'c', 'f', 'd']
答案 5 :(得分:0)
尝试一下:
from itertools import filterfalse
def f(x):
if x in List_sub:
List_sub.remove(x)
return True
return False
list(filterfalse(f, list_joined))
答案 6 :(得分:0)
如果要忽略首次出现,请执行以下操作:
List_main = ['a','b','c','d','e','f','g','h']
List_sub = ['c','f','d']
dict_main = dict.fromkeys(List_sub)
list_joined = []
for x in List_main:
if x in dict_main.keys():
if dict_main[x] is None:
dict_main[x] = 1
else:
list_joined += x
else:
list_joined += x
list_joined += List_sub
print(list_joined)
答案 7 :(得分:-1)
您可以使用以下代码将其删除:
list_main = ['a','b','c','d','e','f','g','h']
list_sub = ['c','f','d']
for sub_item in list_sub:
if sub_item in list_main:
list_main.remove(sub_item)
list_main += sub_item
或者只是不添加重复的项目:
list_main = ['a','b','c','d','e','f','g','h']
list_sub = ['c','f','d']
for sub_item in list_sub:
if sub_item not in list_main:
list_main.append(sub_item)
此外,如果您不想重复项目,可以使用set
。但是请注意,set
不会保留元素的初始顺序。
list_main = ['a','b','c','d','e','f','g','h']
list_sub = ['c','f','d']
result_list = list(set(list_main + list_sub))