Bir sorun var: herhangi bir türde nesnelerle bir tuple alma ve iki tuple ayırma: ilk, yalnızca dizelerle; ikincisi, sadece rakamlarla.Bir tuple, pythonic bir şekilde ikiye bölme
Tamam.
def separate(input_tuple):
return_tuple = ([],[])
for value in input_tuple:
if isinstance(value, str):
return_tuple[0].append(value)
if isinstance(value, numbers.Number):
return_tuple[1].append(value)
return tuple([tuple(l) for l in return_tuple])
Bu şekilde, sadece kez yineleme: Standart algoritma gibi bir şey olurdu.
Sorum şu: daha pythonic bir şekilde yapmanın bir yolu var mı? Tek liner mı?
Ben
(tuple([i for i in input_tuple if isinstance(i,str)]), tuple([i for i in input_tuple if isinstance(i,numbers.Number)]))
denedi Ama biz iki kez girdi başlığın üzerinde yineleme gibi, daha az verimlidir. iki yinelemeleri gibi Ayrıca , tuple([ tuple([i for i in input_tuple if isinstance(i, k)]) for k in ((float ,int,complex), str) ])
, aynı sorun vardır. Bu sadece bir kez yinelemek ve sonuç elde etmek mümkün olabilir mi, ya da iki tuple ayrılıyorum, mümkün değil mi?
Teşekkürler!
"Pythonic yol" için gitme, iyi hizmet veren ve neredeyse her zaman okunabilir ve kolay anlaşılır bir kod parçasını 1-satır-kod çözücü-ring gerektiren bir karmaşaya indirgeyen bir tuzaktır. Amacınız, okunması ve okunması kolay olan, olabildiğince az satır içermeyen bir biçimde biçimlendirilmiş kodlara sahip olmak olmalıdır. –
@TymoteuszPaul Bunun farkındayım. Aslında bu kodu kullanmıyorum ama liste anlama hakkında düşündüğümde kendimi kısıtlı hissediyorum ve son zamanlarda çalışıyorum; Yığın taşmasından insanlar beni her zaman cevaplarıyla etkiliyor, bu yüzden bu mümkün olup olmadığını merak ediyorum! Yine de tavsiye için teşekkürler! Sonuçta, 'Açık, örtük olmaktan iyidir'! – RafaelC
Java'da, bu işlemi bölünmeye büyük bir özenle çağırıyoruz! spliterators ftw. – Shashank