पायथन में, मैं कोड की एक पंक्ति में n वर्णों की एक स्ट्रिंग कैसे बनाऊं?


148

मुझे पायथन में n वर्णों के साथ एक स्ट्रिंग उत्पन्न करने की आवश्यकता है। क्या मौजूदा पायथन पुस्तकालय के साथ इसे प्राप्त करने के लिए एक पंक्ति का उत्तर है? उदाहरण के लिए, मुझे 10 अक्षरों की एक स्ट्रिंग चाहिए:

string_val = 'abcdefghij'

23
"कोड की एक पंक्ति में" छोड़ें कोड को प्रतियोगिता में शामिल करें। जब किसी समस्या का समाधान स्वाभाविक रूप से एक पंक्ति के रूप में लिखा जाता है, तो यह होगा; अन्यथा यह नहीं होना चाहिए। इसे स्वयं के लक्ष्य के रूप में उपयोग करना, गंदे कोड की गारंटी वाला मार्ग है।
ग्लेन मेनार्ड

3
जब तक, निश्चित रूप से, यह होमवर्क है। जिस स्थिति में, "कोड की एक पंक्ति में" छोड़ दें, लेकिन ईमानदार रहें और [होमवर्क] टैग शामिल करें।
एस.लॉट

5
यह वास्तव में एक होमवर्क प्रश्न नहीं है, मुझे सिर्फ अपने टेस्ट स्क्रिप्ट में n लंबाई की एक स्ट्रिंग की आवश्यकता है। मैं भूल गया कि पायथन में, एक एन को गुणा किया जा सकता है, जहां मैं जो चाहता हूं उसे प्राप्त करने के लिए एक सकारात्मक पूर्णांक है।
थियरी लैम

जवाबों:


310

एक ही अक्षर को 10 बार दोहराने के लिए:

string_val = "x" * 10  # gives you "xxxxxxxxxx"

और अगर आप कुछ और अधिक जटिल चाहते हैं, जैसे nयादृच्छिक लोअरकेस अक्षर, यह अभी भी कोड की केवल एक पंक्ति है (आयात विवरणों को गिनना और परिभाषित नहीं करना n):

from random import choice
from string import ascii_lowercase
n = 10

string_val = "".join(choice(ascii_lowercase) for i in range(n))

9

पहले दस लोअरकेस अक्षर हैं string.lowercase[:10](यदि आपने stringपहले मानक लाइब्रेरी मॉड्यूल आयात किया है , तो निश्चित रूप से ;-)।

: करने के अन्य तरीके "10 वर्णों की स्ट्रिंग बनाने के" 'x'*10(सभी दस अक्षर लोअरकेस हो जाएगा xरों ;-), ''.join(chr(ord('a')+i) for i in xrange(10))(पहले दस छोटे अक्षरों फिर से), आदि, आदि ;-)।


6
पायथन 3.1.1 में, यह वास्तव में string.ascii_lowercase है।
लास वी। कार्लसन

1
हां, अजगर 3 को हटा दिया गया .lowercase( ascii_lowercaseहाल ही में पायथन 2 के साथ-साथ पायथन 3 में भी है)।
एलेक्स मार्टेली

5

यदि आप केवल कोई पत्र चाहते हैं:

 'a'*10  # gives 'aaaaaaaaaa'

यदि आप लगातार पत्र चाहते हैं (26 तक):

 ''.join(['%c' % x for x in range(97, 97+10)])  # gives 'abcdefghij'

3

क्यों "एक पंक्ति"? आप एक लाइन पर कुछ भी फिट कर सकते हैं।

यह मानते हुए कि आप उन्हें 'क' से शुरू करना चाहते हैं, और हर बार एक पात्र द्वारा बढ़ाना (रैपिंग> 26 के साथ), यहाँ एक पंक्ति है:

>>> mkstring = lambda(x): "".join(map(chr, (ord('a')+(y%26) for y in range(x))))
>>> mkstring(10)
'abcdefghij'
>>> mkstring(30)
'abcdefghijklmnopqrstuvwxyzabcd'

2
आप कुछ भी एक पंक्ति में फिट कर सकते हैं, एह? काफी दावा करें, पुन: पायथन :)
ग्रेग लिंड

6
ग्रीग: पायथन सेमीकॉलन को स्टेटिमेंट के रूप में अनुमति देता है, इसलिए यदि आप चाहें तो पूरे कार्यक्रम को एक पंक्ति में रख सकते हैं।
जॉन मिलिकिन

2
यद्यपि आप अर्धविराम के साथ मनमाना प्रवाह नियंत्रण नहीं कर सकते। उदाहरण के लिए नेस्टेड लूप।
पुनरावर्ती

3

यह सवाल से थोड़ा हटकर हो सकता है, लेकिन उत्पन्न स्ट्रिंग की यादृच्छिकता में रुचि रखने वालों के लिए, मेरा जवाब होगा:

import os
import string

def _pwd_gen(size=16):
    chars = string.letters
    chars_len = len(chars)
    return str().join(chars[int(ord(c) / 256. * chars_len)] for c in os.urandom(size))

इन उत्तरों और random.pyअधिक जानकारी के लिए स्रोत देखें ।


2

यदि आप दोहराया अक्षरों का उपयोग कर सकते हैं, तो आप *ऑपरेटर का उपयोग कर सकते हैं :

>>> 'a'*5

'aaaaa'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.