Jak generowac stringi bez powtarzania znakow.

Jak generowac stringi bez powtarzania znakow.
RoboCat
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 32
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):

Kopiuj
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.

NS
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 457
0

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

RoboCat
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 32
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)

maciekniewielki
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 36
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:

Kopiuj
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ę.

SE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 318
1

Ale myslalem ze python ma jkis magiczny skrot :D

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

RoboCat
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 32
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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.