एक टपल T को देखते हुए जिसमें सभी अलग-अलग पूर्णांक होते हैं, मैं उन सभी टुपल्स को प्राप्त करना चाहता हूं जो T से अलग-अलग पूर्णांक छोड़ने के परिणामस्वरूप होते हैं। मैं निम्नलिखित कोड के साथ आया:

def drop(T):
    S = set(T)
    for i in S:
        yield tuple(S.difference({i}))

for t in drop((1,2,3)):
    print(t)
# (2,3)
# (1,3)
# (1,2)

मैं इससे नाखुश नहीं हूं, लेकिन मुझे आश्चर्य है कि क्या कोई बेहतर/तेज़ तरीका है क्योंकि बड़े टुपल्स के साथ, difference() को सेट में आइटम की तलाश करनी है, लेकिन मुझे पहले से ही पता है कि मैं आइटम हटा दूंगा क्रमिक रूप से। हालाँकि, यह कोड केवल 2x तेज है:

def drop(T):
    for i in range(len(T)):
        yield T[:i] + T[i+1:]

और किसी भी स्थिति में, T के आकार के साथ न तो रैखिक रूप से मापे जाते हैं।

1
Ziofil 30 नवम्बर 2020, 15:03

2 जवाब

सबसे बढ़िया उत्तर

इसे "निकालें प्रत्येक आइटम एक आइटम" के रूप में देखने के बजाय आप इसे "सभी का उपयोग करें लेकिन एक"< के रूप में देख सकते हैं /em> और फिर itertools का उपयोग करके इसे सीधा हो जाता है:

from itertools import combinations

T = (1, 2, 3, 4)
for t in combinations(T, len(T)-1):
    print(t)

जो देता है:

(1, 2, 3)
(1, 2, 4)
(1, 3, 4)
(2, 3, 4)

* आदेश मान लेना वास्तव में मायने नहीं रखता

3
Tomerikoo 30 नवम्बर 2020, 15:16

अपने विवरण से, आप T के तत्वों के संयोजन की तलाश कर रहे हैं। itertools.combinations के साथ, आप सभी r-लंबाई वाले टुपल्स को क्रमबद्ध क्रम में, बिना दोहराए गए तत्वों के लिए पूछ सकते हैं। उदाहरण के लिए :

import itertools
T = [1,2,3]
for i in  itertools.combinations(T, len(T) - 1):
   print(i)
1
FrancoisB 30 नवम्बर 2020, 15:19