在列表中排列项目

时间:2013-11-22 00:53:26

标签: python list

描述: 给定一个列表,您需要查看该列表中的第一个元素,并将该项的所有匹配项追加到新列表中,然后移动下一个元素并将该项的所有匹配项追加到新列表中,依此类推。 / p>

示例:提供诸如

之类的列表
sample_list = [1,2,1,2]

您查看列表中的第一个元素,我们注意到它是1,因此我们将所有出现的元素添加到新列表中并将其从样本列表中删除:

我们现在得到:

new_list = [1,1]
sample_list = [2,2]

现在,我们继续使用sample_list中的下一个元素,它是一个2,所以我们将所有出现的元素追加到new_list并从sample_list中删除它们:

我们现在得到:

new_list = [1, 1, 2, 2]
sample_list = []

最后我们返回new_list。

所有这一切都必须完成,不用任何导入模块的使用。

一些例子及其预期产出:

[1, 3, 3, 1, 1]
>>> [1, 1, 1, 3, 3]
['a', 'b', 'b', 'b', 'c', 'd', 'a']
>>> ['a', 'a', 'b', 'b', 'b', 'c', 'd']
['9', '6', '9', '3']
>>> ['9', '9', '6', '3']

感谢您的帮助

我可怕的尝试:

def arrangement(sample_list):
    new_list = []
    item = sample_list[0]
    for element in sample_list:
        if element == item:
            new_list.append(element)
        else:
            pass
    for i in sample_list:
        if i != item:
            new_list.append(i)
        else:
            pass
    return new_list

>>> ['a', 'b', 'a', 'b']
['a', 'a', 'b', 'b']
>>> [1, 1, 2, 1, 2, 1]
[1, 1, 1, 1, 2, 2]
>>> [1, 1, 2, 1, 2, 3, 1]
[1, 1, 1, 1, 2, 2, 3]
>>> [1, 3, 2, 3, 1, 1, 2]
[1, 1, 1, 3, 2, 3, 2] # Fails here, I know why it failed but I can't figure out what to edit in code to fix this. Answer should be: [1, 1, 1, 3, 3, 2, 2]

2 个答案:

答案 0 :(得分:1)

from collections import Counter

sample_list = [1, 2, 1, 2]

def arrangement(lst):
    lookup = Counter(lst)
    result = []
    for item in lst:
        try:
            num = lookup.pop(item)
            result.extend(item for i in range(num))
        except KeyError:
            pass
    return result

if __name__=="__main__":
    print sample_list, arrangement(sample_list)

答案 1 :(得分:1)

使用pop()函数,详见python docs。