Her biri kendi satırında bir sayı listesi alacağım (0 -100 arası). Listelenmeyen veya eksik olan numaraları nasıl bulabilirim?Listelenmeyen veya eksik olan numaraları nasıl bulurum?
cevap
Hepsini bir kümeye ekleyin. Daha sonra 1-100 ile doldurulmuş bir setten çıkarınız. İşte 0-9 için bir örnek: Ben [1, 4, 5, 6, 8, 2]
listelenen vardı
>>> set(range(10)) - set([1, 4, 5, 6, 8, 2])
set([0, 9, 3, 7])
>>>
. 0-9 aralığında hangi sayıların eksik olduğunu bulmak için, 0-9 arası bir set oluşturdum ve daha sonra seti [1, 4, 5, 6, 8, 2]
ile çıkarttım. Ve [0, 9, 3, 7]
'un eksik olduğunu öğrendim.
Takımlar bunun için oldukça verimlidir. Ek bir avantaj olarak, çiftler incelikle ele alınacaktır.
L, daha sonra
set(L).difference(xrange(101))
numaralarının listesi ise xrange Burada
In [1]: L=[1, 4, 5, 6, 8, 2]
In [2]: timeit set(range(101)) - set(L)
10000 loops, best of 3: 21.7 µs per loop
In [3]: timeit set(L).symmetric_difference(range(101))
100000 loops, best of 3: 14.2 µs per loop
In [4]: timeit set(L).difference(range(101))
100000 loops, best of 3: 9.73 µs per loop
“Farkı” da kullanabilirsiniz, 'symmetric_difference' aslında bir XOR –
@Eli, iyi nokta, daha hızlı –
bir ilişkisel kullanarak awk
çözüm ile ilgili bir dizi oluşturma kaydeder (anahtar değeri) dizi:
printf '%s\n' 1 4 5 6 8 2 |
awk -F " " -v first=0 -v last=9 '
BEGIN {
for(i=first; i<=last; i++)
array[i] = 0
}
{
for(i=1;i<=NF;i++)
array[$i] += 1
}
END {
for (num in array)
if (array[num] == 0) print num
}
'
- İlk olarak, biz varsayılan değer 0 olan tek bir anahtar olarak kullanılan belirli bir aralığın tüm sayıları ile bir dizi yedim.
- Her bir giriş sayısı daha sonra awk tarafından diziye bir anahtar olarak işlenir, böylece değer 1'den artırılır.
- Sonunda, sadece bu tuşlar artırılmamış, yani 0 değerine sahip olan (yani, sayıların giriş aralığından eksik oldukları için) basılanları alırlar.
bash: Eğer
# first set up an array containing the whole range
declare -a nums
for i in {0..100}; do
nums[$i]=1
done
# then read the file and remove the numbers from it
while read number; do
unset nums[$number]
done < file.with.numbers
# the remaining array keys are the numbers not found in the file
for number in "${!nums[@]}"; do
echo $number
done
- 1. Yöntem çağrılarını nasıl bulurum?
- 2. Projede eksik olan Avarası bulun
- 3. Numaraları?
- 4. R: Eksik ve/veya eksik olan satırları zamanla ilgili veri çerçevesinde bulun ve ekleyin
- 5. Sürüm Numaraları yüzer, ondalık veya çift
- 6. Eclipse/Maven Proje gerekli eksik olan kütüphane/Eksik eser
- 7. Yolun üst dizinini nasıl bulurum?
- 8. Güncel kütüphaneleri sbt ile nasıl bulurum?
- 9. openIMAJ eksik veya yanlış kütüphanesi
- 10. android grafik görüş y ekseni numaraları kesilmiş olan
- 11. Yeni Laravel Projesi'nde eksik olan rotalar.php Dosyası
- 12. Typescript + Webpack projesinde eksik olan eksiklikler
- 13. Bir işlevin reentrant olup olmadığını nasıl bulurum?
- 14. Numaraları BufferedReader
- 15. Bağlantı havuzumdaki bağlantıların ne olduğunu nasıl bulurum?
- 16. Belirli bir alt düğümde eksik olan XML düğümü nasıl bulunur?
- 17. Android'de gps konumunu periyodik olarak nasıl bulurum?
- 18. Numaraları kaybetme/değiştirme
- 19. icu4j ile biçimlendirme numaraları (spellout)
- 20. SQLAlchemy eşlemeli nesneden tablo özelliklerini nasıl bulurum?
- 21. Bir Subversion Deposu Geçmişinde Nasıl Dosya Bulurum?
- 22. Belirli bir değere yakın değerleri nasıl bulurum?
- 23. Son pazartesi momentleri kullanarak nasıl bulurum?
- 24. phpmyadmin'den mySQL sunucusu ip adresini nasıl bulurum?
- 25. Her diğer öğeyi bir listede nasıl bulurum?
- 26. Bir klasörün tüm alt klasörlerini nasıl bulurum?
- 27. UIView. Kök SuperView'ı Nasıl Hızlı Bulurum?
- 28. Bir karakter dizisini C cinsinden nasıl bulurum?
- 29. Bir Word uygulama penceresini nasıl bulurum?
- 30. Capybara'daki ilk onay kutusunu nasıl bulurum?
tekrarlanan var mı numaralar? Sıralandı mı? Bu ev ödevi mi? :-) – juanchopanza
Python veya Bash? – Chetan