Jak generowac stringi bez powtarzania znakow.

0

Witam,

Czy jest jakis pythonowy skrot zeby wygenerowac string w ktorym znaki sie nie powtarzaja?
Ponizej moj aktualny kod (generuje stringi z powtarzajacymi sie znakami):

def GetRandomRecord(size, chars):
    return ''.join(random.choice(chars) for _ in range(size))

def generateData(recordsCount, maxItemsPerSet):
    chars = string.ascii_uppercase[:maxItemsPerSet]
    for _ in range(0,recordsCount):
        print(GetRandomRecord(random.randint(1, maxItemsPerSet), chars))

generateData(10, 3)

Generuje tutaj string o losowej maksymalnej dlugosci ze znakow uppercase( do wyboru znaki od A do A+max ilosc znakow/record).
Chcialbym jedak aby znaki byly unikalne, tzn w jednym rekordzie znaki nie moga sie powtarzac.
Czy jest jakis skrot w pythonie zeby to uzyskac?

Dziekuje.

0

Wrzucasz znaki, które już użyłeś do listy. I sprawdzasz czy znak jest na liście.

0

No ale wtedy bede musial ponownie losowac znak zeby ilosc mi sie zgadzala.
Moge tez zrobic temp liste ze znakami i wyrzucac przy kazdej iteracji wylosowany wczesniej znak - wtedy nie bede mogl go juz wylosowac.
Ale myslalem ze python ma jkis magiczny skrot :D (ucze sie aktualnie takich)

1

Jeśli nie chcesz sprawdzania czy coś już wystąpiło, to możesz zrobić shuffle na liście z której będziesz brać znaki. Będzie je wtedy miała w losowej kolejności, więc wystarczy wziąć size pierwszych:

import string
import random

def get_random_record(size, chars):
    random.shuffle(chars)
    return ''.join(chars[:size])

def generate_data(records_count, max_data_length):
    chars = list(string.ascii_uppercase[:max_data_length])
    for _ in range(records_count):
        print(get_random_record(random.randint(1, max_data_length), chars))

generate_data(10, 5)

shuffle miesza listę w miejscu, więc w zależności od potrzeb można zrobić najpierw kopię.

1

Ale myslalem ze python ma jkis magiczny skrot :D

Nie jestem pewien, czy o taką magię chodzi:
https://pypi.org/project/StringGenerator/

0

@Serechiel dzieki.
Spojzalem sobie w ich sourcecode i jak widze ze oni nie uzyli jakichs sztuczek to ja tez raczej nic nie wymysle i musze zrobic to "normalnie" tak jak z innymi jezykami :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1