ใน Python ฉันจะสร้างสตริงของอักขระ n ตัวในโค้ดหนึ่งบรรทัดได้อย่างไร


148

ฉันต้องการสร้างสตริงที่มีตัวอักษร n ตัวใน Python มีคำตอบหนึ่งบรรทัดเพื่อให้บรรลุสิ่งนี้ด้วยห้องสมุด Python ที่มีอยู่หรือไม่ ตัวอย่างเช่นฉันต้องการสตริง 10 ตัวอักษร:

string_val = 'abcdefghij'

23
ปล่อยให้ "ในหนึ่งบรรทัดของรหัส" เพื่อการแข่งขัน obfuscation รหัส เมื่อวิธีการแก้ปัญหาเขียนโดยธรรมชาติเป็นหนึ่งบรรทัดมันจะเป็น; ไม่อย่างนั้นมันก็ไม่ควรจะเป็น การใช้มันเป็นเป้าหมายของตัวเองเป็นเส้นทางที่รับประกันรหัสที่น่ารังเกียจ
Glenn Maynard

3
แน่นอนว่านี่ไม่ใช่การบ้าน ในกรณีนี้ให้ปล่อย "ในโค้ดหนึ่งบรรทัด" แต่จงซื่อสัตย์และใส่แท็ก [การบ้าน]
S.Lott

5
จริงๆแล้วมันไม่ใช่คำถามการบ้านฉันแค่ต้องการความยาว n ในสคริปต์ทดสอบของฉัน ฉันลืมว่าใน Python char สามารถคูณด้วย n โดยที่ 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(อักขระสิบตัวทั้งหมดจะเป็นตัวพิมพ์เล็กxs ;-) ''.join(chr(ord('a')+i) for i in xrange(10))(ตัวอักษรตัวพิมพ์เล็กสิบตัวแรกอีกครั้ง) ฯลฯ ฯลฯ ;-)


6
ใน Python 3.1.1 มันเป็น string.ascii_lowercase จริงๆ
Lasse V. Karlsen

1
ใช่, python 3 ถูกลบ.lowercase( ascii_lowercaseอยู่ใน Python 2 ล่าสุดและ Python 3)
Alex Martelli

5

ถ้าคุณต้องการตัวอักษร:

 'a'*10  # gives 'aaaaaaaaaa'

หากคุณต้องการตัวอักษรต่อเนื่อง (สูงสุด 26):

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

3

ทำไม "หนึ่งบรรทัด" คุณสามารถใส่อะไรก็ได้ลงในหนึ่งบรรทัด

สมมติว่าคุณต้องการให้พวกเขาเริ่มต้นด้วย 'a' และเพิ่มขึ้นทีละตัวอักษรในแต่ละครั้ง (ด้วยการตัด> 26) นี่คือบรรทัด:

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

2
คุณสามารถใส่อะไรก็ได้ในบรรทัดเดียวใช่มั้ย ค่อนข้างเรียกร้อง Re: งูหลาม :)
เกร็กลินด์

6
Gregg: Python อนุญาตให้ใช้เครื่องหมายอัฒภาคเป็นตัวคั่นคำสั่งดังนั้นคุณสามารถใส่โปรแกรมทั้งหมดในหนึ่งบรรทัดหากต้องการ
John Millikin

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'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.