2016-04-12 26 views
-3

Sayı 90 - 480 arasında bir liste alıyorum; bu aralık tamamen dolu değil. Demek istediğim, listenin 90, 91, 92, 94, 95 ... vb. Olması ve 480'e kadar kayıp 93 olması bekleniyor. Listeyi her aldığımda çok sayıda kopya var. Ayrıca, bir seferde en fazla 10 liste alabilirim. Listeyle ilgili bildiğim, yinelenen varsa, zamanın% 100'üyse, 2 kopyadan birincisini 1 değerine düşürürsem, sonra yinelenenleri taramaya devam etmem yeterli olur. liste şöyle görünebilir: '90, 91, 92, 93, 95, 95, 96, 98, 100, 100, 102, 102 ..... 'bu listeyi doğru bir şekilde almak için değişmem gerekecek ilk 95 ila 94, ilk 100 ila 99 ve ilk 102 ila 101.Yinelenen sayıların listesini nasıl arar ve 2 yinelenen değerden ilkini 1'e nasıl indirebilirim?

Hatalı bir yerde soruyorum, ama sadece bu soru uğruna özür dilerim; Listede excel var ama Python veya Linux'u da kullanabiliyordum. Teşekkürler!

+0

kod henüz denedim var mı? –

+0

Sorununun aslında ne olduğu çok net değil ... –

+0

Yığın taşması, okul görevlerini yerine getirmemeye yardımcı olmak içindir – DespeiL

cevap

0
>>> i = 0 
>>> a = [1,3,3,4,6,6] 
>>> numbers = [] 
>>> while i < len(a): 
...  if a.count(a[i]) == 1: numbers.append(a[i]); i += 1 
...  else: numbers.append(a[i]-1); a.remove(a[i]) 
... 
>>> numbers 
[1, 2, 3, 4, 5, 6] 

Bu orada bunu yapmak için daha iyi bir yoldur ama ben şu anda bulamıyorum Eminim size İstenen çıktıyı verecektir

+0

Bu tam olarak aradığım şey. Çok teşekkür ederim! – user3299009

0

Sen pairwise tarifi dayanan aşağıdaki yaklaşımı deneyebilirsiniz :

from itertools import tee, izip 

numbers = [90, 91, 92, 93, 95, 95, 96, 98, 100, 100, 102, 102] 
fixed = [] 
a, b = tee(numbers) 
next(b, None) 

for x, y in izip(a, b): 
    if x == y: 
     x -= 1 
    fixed.append(x) 
fixed.append(y)   

print fixed 

Bu ekran olacaktır:

[90, 91, 92, 93, 94, 95, 96, 98, 99, 100, 101, 102]