我一直在努力工作几个小时。我需要修改一个列表,这样每个元素只出现两次而不改变列表的顺序。
我是初学者,不能想到我的方式。到目前为止我所有的只是重复列表,但我似乎无法想到如何只重复两次相同的数字来扩展列表。我目前有什么:
def makeDuplicate(my_list):
new_list = my_list.copy()
my_list.extend(new_list)
但我需要(带有示例列表):
my_list = [4, 1 ,2 ,3]
makeDuplicate (my_list)
my_list
输出:
[4 , 1, 2, 3 , 4 , 1 , 2 , 3]
另一个例子:
my_list = [4 ,1 ,2 ,3 ,3 ,4 ,4 ,5]
makeDuplicate(my_list)
my_list
[4, 1, 2, 3, 3, 4, 5, 1, 2, 5]
非常感谢任何帮助。
答案 0 :(得分:1)
>>> my_list = [4 ,1 ,2 ,3]
>>> my_list * 2
[4, 1, 2, 3, 4, 1, 2, 3]
编辑:我在下面的评论和第二个例子后更新我的答案
my_list = [4 ,1 ,2 ,3 ,3 ,4 ,4 ,5]
frequency = {}
for elem in my_list:
if elem in frequency:
frequency [elem] += 1
else:
frequency [elem] = 1
items_to_append = []
for elem in my_list:
if frequency [elem] == 1:
items_to_append.append (elem)
my_list.extend (items_to_append)
答案 1 :(得分:0)
有一种残酷的力量可以做到这一点。
首先,您可以简单地复制列表并将其扩展到原始列表,就像您在此处所做的那样。
但是,这并不能保证列表中的数字只显示两次。因此,您只需浏览扩展列表并计算每个不同值的显示次数。如果某个值已经显示两次,则下次在列表中遇到该值时将删除该值。 要计算显示不同值的次数,可以使用字典对其进行计数。
原文:my_list = [4,1,2,3,3,4,4,5]
延伸:my_list = [4,1,2,3,3,4,4,5,4,1,2,3,3,4,4,5]
删除:my_list = [4,1,2,3,3,4,5,1,2,5]
答案 2 :(得分:0)
也许是这样的?
my_first_list = [1, 2, 3, 4]
my_second_list = [4, 1, 2, 3, 3, 4, 4, 5]
def makeDuplicate(my_list):
my_list += my_list
my_list.reverse()
for i in my_list:
if my_list.count(i) > 2:
my_list.remove(i)
my_list.reverse()
return my_list
print(makeDuplicate(my_first_list))
print(makeDuplicate(my_second_list))
它不是漂亮的代码,但有效;)
答案 3 :(得分:0)
您可以尝试这一步一步的方法:
data=[4 ,1 ,2 ,3 ,3 ,4 ,4 ,5]
def copy_list(list_):
#create a copy
copy_=list_[:]
copy_.extend(list_)
# save the index of each no for tracking
hash_table={}
for i,j in enumerate(copy_):
if j not in hash_table:
hash_table[j]=[(i,j)]
else:
hash_table[j].append((i,j))
#check if a no is there more than 2 times
for ma,mm in hash_table.items():
if len(mm)>2:
hash_table[ma]=mm[:2]
n=hash_table.values()
datay=[0]*int(max([m[0] for i in n for m in i])+1)
# save no as previous index without changing their order
for ii,jj in hash_table.items():
for mm in jj:
datay[mm[0]]=mm[1]
#just filter result
return list(filter(None,datay))
print(copy_list(data))
输出:
[4, 1, 2, 3, 3, 4, 5, 1, 2, 5]