Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在一个列表中识别重复的整数,而不是将重复的整数减去一?_Python_Python 3.x - Fatal编程技术网

Python 如何在一个列表中识别重复的整数,而不是将重复的整数减去一?

Python 如何在一个列表中识别重复的整数,而不是将重复的整数减去一?,python,python-3.x,Python,Python 3.x,我正在努力解决我目前遇到的一个问题。我想要一个只由随机整数组成的列表。然后,如果我在这个列表中找到一个重复的整数,我想在第二次出现重复的数字后,将列表的其余部分减去1。此外,如果遇到第二对重复的数字,那么它应该将列表的其余部分减去2,而不是第三对减去3,以此类推 但它不应影响序列中相同的重复编号或任何其他重复编号(与第一个不同) 比如说 mylist = [0 1 2 3 4 5 6 2 8 5 10 11 12 1 14 15 16 17] 我希望最终结果是这样的 mylist = [0 1

我正在努力解决我目前遇到的一个问题。我想要一个只由随机整数组成的列表。然后,如果我在这个列表中找到一个重复的整数,我想在第二次出现重复的数字后,将列表的其余部分减去1。此外,如果遇到第二对重复的数字,那么它应该将列表的其余部分减去2,而不是第三对减去3,以此类推

但它不应影响序列中相同的重复编号或任何其他重复编号(与第一个不同)

比如说

mylist = [0 1 2 3 4 5 6 2 8 5 10 11 12 1 14 15 16 17]
我希望最终结果是这样的

mylist = [0 1 2 3 4 5 6 2 7 5 9 10 11 1 12 13 14 15]
我创建了一些粗略的代码来尝试这一点,但它总是减去整个列表,包括重复的整数(第一对和任何其他对)

如果有人能告诉我如何处理这个问题,我将不胜感激

对不起,忘记添加我的代码了

a = [49, 51, 53, 56, 49, 54, 53, 48]
dupes = list()
number = 1
print (dupes)
while True:
#move integers from a to dupes (one by one)
    for i in a[:]:
        if i >= 2:
            dupes.append(i)
            a.remove(i)
            if dupes in a:
                a = [x - number for x in a]
            print (dupes)
            print(dupes)
    if dupes in a:
        a = [x - number for x in a]
        number = number+1
break

忘了前面提到的,我和朋友目前正在解决这个问题,我提供的代码是我们对is应该是什么样子的粗略概述,现在是最终结果,我知道它现在可以工作了,所以我决定请求帮助解决这个问题

当您遇到重复的问题时,您需要遍历您的列表(可以使用列表切片)然后减少下一项

列表切片-示例

>>> L=[2,4,6,8,10] 
>>> L[1:5] # all elements from index 1 to 5
[4, 6, 8, 10] 
>>> L[3:] # all elements from index 3 till the end of list
[8, 10]
>>> L[:2] # all elements from index beginning of list to second element
[2, 4]
>>> L[:-2] # all elements from index beginning of list to last second element
[2, 4, 6]
>>> L[::-1] # reverse the list
[10, 8, 6, 4, 2]

返回包含计数的元组(从开始,默认为0) 以及在序列上迭代得到的值

所以,

mylist=[0, 1, 2, 3, 4, 5, 6, 2, 8, 5, 10, 11, 12, 1, 14, 15, 16, 17]
dup=0
for index,i in enumerate(mylist):
    if i in mylist[:index]:
        dup+=1
    else:
        mylist[index]-=dup
print mylist
输出:

[0, 1, 2, 3, 4, 5, 6, 2, 7, 5, 8, 9, 10, 1, 11, 12, 13, 14]

即使您的代码不起作用,也要提供它。我们将从它开始/纠正您的错误您的示例不符合您要编写的函数。保留一组找到的项。保留重复项计数。现在,一次检查一项列表,生成一个新列表。您可以选择在末尾设置mylist=newlist,但我只返回t新列表。欢迎来到StackOverflow!请阅读。正确提问将帮助您获得更好的答案,并帮助其他人在遇到simaler问题时能够理解您的问题。抱歉,刚刚添加了它,如果它看起来不正确,那是因为它不是故意的。这是我认为它可能的外观和功能的大致轮廓(n**2)关于什么应该是O(n)问题。答案不符合规范:subtrahand是找到的重复数。我想指出,OP提供了一个预期的答案,但是…它也不符合规范。:)嗨,谢谢你的建议!它似乎对第一个重复对有效(如您的示例所示,整数8已变为7),但其他数字不受影响。例如,数字9应为8,11应为9。但我不确定如何更改代码以实现此目的;(我已经编辑了我的答案!而且,正如@KennyOstrom所指出的,根据你的问题,预期的输出似乎与你在那里解释的不匹配。你现在得到了我认为是正确的答案。我担心的是在更大的输入上的性能。如果你使用集合,平均性能应该是O(n)我猜理论上最坏的情况一定是O(n**2)但是你不希望这成为常态。此外,我更希望它返回一个新的列表,而不是修改输入,但这只是我对良好实践的看法。嗨,谢谢你的新建议!它非常适合我的需要。非常感谢。我不认为我应该像对我的c语言一样担心这段代码的性能压缩文本文件的代码,我想我不需要它太快。只要它能处理大约10个整数。它也不必在同一个列表中,但它确实对我有好处,因为我的代码越来越冗长,变量越来越少,列表等使我的头部受到的伤害更少