修改列表,以便每个元素出现两次而不更改顺序

时间:2018-03-25 15:36:02

标签: python list

我一直在努力工作几个小时。我需要修改一个列表,这样每个元素只出现两次而不改变列表的顺序。

我是初学者,不能想到我的方式。到目前为止我所有的只是重复列表,但我似乎无法想到如何只重复两次相同的数字来扩展列表。我目前有什么:

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]

非常感谢任何帮助。

4 个答案:

答案 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]