मेरे पास एक लंबा कोड है जैसे 545362783 और मैं संख्याओं को एक साथ जोड़ना चाहता हूं और उन्हें गुणा करना चाहता हूं, जैसे (1*5)+(2*4)+(3*5)+(4*3)+(5*6) आदि।

क्या उन्हें पूर्णांक के रूप में प्राप्त करने का कोई सरल उपाय है ताकि मैं इनका उपयोग गणित में कर सकूं। बहुत धन्यवाद!

0
Me Myself 8 अक्टूबर 2019, 12:56
एक सरल उपाय है लेकिन यह मजबूत नहीं है। इसे मजबूत बनाने के लिए आपको शायद एक पार्सर की आवश्यकता होगी। आप पायथन के ast मॉड्यूल का उपयोग कर सकते हैं, लेकिन यह केवल गणित से अधिक विश्लेषण करेगा: >>> ast.dump(ast.parse('(1 + 2) + (3 + 4)')) आपको एक पार्स की गई अभिव्यक्ति देगा: 'Module(body=[Expr(value=BinOp(left=BinOp(left=Num(n=1), op=Add(), right=Num(n=2)), op=Add(), right=BinOp(left=Num(n=3), op=Add(), right=Num(n=4))))])'
 – 
Reut Sharabani
8 अक्टूबर 2019, 13:11
नमस्ते और StackOverflow के जहाज पर आपका स्वागत है। जैसा कि आपका प्रश्न आम तौर पर स्पष्ट है, एक अधिक संरचित प्रश्न, विशेष रूप से एक उदाहरण के साथ जिसे आसानी से कॉपी किया जा सकता है, सहायक होगा।
 – 
MichaelA
8 अक्टूबर 2019, 13:13

5 जवाब

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

इसे करने का एक तरीका:

s = '545362783'

a = sum(x * int(c) for x, c in zip(range(1, len(s) + 1), s))
print(a)
# 222

क्या हो रहा है निम्नलिखित है:

  • s सिर्फ एक स्ट्रिंग है इसलिए इसके माध्यम से लूपिंग प्रत्येक वर्ण देगा
  • range(1, len(s) + 1), 1 से s की लंबाई तक के पूर्णांक देगा।
  • zip() अपने तर्कों को समूहबद्ध कर रहा है ताकि 1 और '5' (आदि) एक ही समय में for लूप द्वारा प्राप्त हों
  • फिर, c जिसमें वर्ण हैं, को int में बदल दिया जाता है
  • अंत में सभी को एक साथ गुणा किया जाता है और sum() के साथ जोड़ दिया जाता है

वही कुछ अधिक कुशलता से किया जा सकता है enumerate() (start पैरामीटर का अच्छा उपयोग करते हुए, इसी तरह @ शाहफ के जवाब में किया गया है):

a = sum(x * int(c) for x, c in enumerate(s, 1))

यह अनिवार्य रूप से ऊपर जैसा ही है लेकिन थोड़ा अधिक सुरुचिपूर्ण (और शायद तेज़ भी)। enumerate() का व्यवहार केवल उस वस्तु के साथ एक सूचकांक उत्पन्न करना है जिसके माध्यम से लूप किया जा रहा है।

2
norok2 8 अक्टूबर 2019, 15:22
यही वह समाधान है जिसे मैं पसंद करूंगा, मुझे नहीं पता था कि मुझे योग के अंदर एक सूची समझ की आवश्यकता नहीं है, हालांकि।
 – 
MichaelA
8 अक्टूबर 2019, 13:21
sum() जनरेटर के साथ ठीक है और यह मध्यवर्ती अनावश्यक list बनाने से बचाता है।
 – 
norok2
8 अक्टूबर 2019, 13:29
1
अरे। जादू की तरह काम करता है। क्या अभी भी प्रत्येक नंबर के माध्यम से लूप करना संभव होगा लेकिन आखिरी वाला। मान लें कि मेरे पास 10 वर्ण हैं, लेकिन मैं उनमें से केवल 9 से गुणा करना चाहता हूं। सहायता के लिए धन्यवाद!
 – 
Me Myself
8 अक्टूबर 2019, 13:35
1
बस सूची को टुकड़ा करें: योग (ए * int (बी) ए के लिए, बी गणना में (एस [: -1], 1)) काम करना चाहिए।
 – 
MichaelA
8 अक्टूबर 2019, 14:48

आप इसे करने के लिए एक काफी सरल विधि लिख सकते हैं, जैसे smth

num_str = "545362783"
total = 0;
for idx, num in enumerate(num_str, 1):
  total += idx * int(num)
1
shahaf 8 अक्टूबर 2019, 13:29
enumerate() में start पैरामीटर का अच्छा उपयोग।
 – 
norok2
8 अक्टूबर 2019, 13:27

अनपैक करने का प्रयास करें

s = '545362783'
# --> to map each character of the string to a list:
print([*s])
['5', '4', '5', '3', '6', '2', '7', '8', '3']

# --> to map each character of the string directly to a list of integers:
# (thanks Mykola Zotko for the comment!)
print(list(map(int, s)))
[5, 4, 5, 3, 6, 2, 7, 8, 3]

अनपैकिंग ऑपरेटर पर अधिक * उदाहरण देखें। यहां

1
MrFuppes 8 अक्टूबर 2019, 14:28
@MeMyself: इस मामले में एक स्ट्रिंग की तरह चलने योग्य से अलग-अलग तत्वों को प्राप्त करने के लिए यह एक सामान्य समाधान है। आपके प्रश्न में उल्लिखित विशिष्ट गणना के लिए, मुझे लगता है कि norok2's answer बहुत अच्छा है।
 – 
MrFuppes
8 अक्टूबर 2019, 13:25
कोशिश करें list(map(int, s))
 – 
Mykola Zotko
8 अक्टूबर 2019, 13:47
@ मायकोलाज़ोटको: टिप्पणी के लिए धन्यवाद, एक संपादन किया ;-)
 – 
MrFuppes
8 अक्टूबर 2019, 14:31

यहाँ समाधान है। मुझे आशा है कि यह आपकी मदद कर सकता है:

a = list(str(545362783))
count = 1
c = []
for i in a:
    b = count * int(i)
    c.append(b)
    count = count + 1

sum_of_a = sum(c)
print(sum_of_a)

आउटपुट:

222
0
Smack Alpha 8 अक्टूबर 2019, 13:15
def count_substring(string):
    string = '545362783'
    multi = []
    for i in range(0, len(string)):
       multiplied = int(i+1) * int(string[i])
       multi.append(multiplied) 

print (multi)
print (sum(multi))

आप यह कोशिश कर सकते हैं।

आउटपुट:

[5, 8, 15, 12, 30, 12, 49, 64, 27]

222

0
indhu 8 अक्टूबर 2019, 13:33