Python:for循环引起的栅栏柱

时间:2018-06-23 20:58:46

标签: python loops for-loop

我正在尝试在Python中构建一个基本的随机序列号生成器,该生成器会将每个生成的S \ N插入列表中。 在每个生成的S \ N的末尾都有一个不必要的破折号(-)。例如:

tf.Estimator

代码:

XXXX-YYYY-ZZZZ-NNNN-

输出:

import random
import string

x = ""
l = [] # A blank list

for y in range(0,3): # Creating 3 different serial numbers
    for t in range(0,4): # Creating 4 sections to each S\N and seperating them with a dash (-)
        for i in range(0, 5): # Creating a 5 letters combination
            x += random.choice(string.ascii_letters)

        x += "-" # Causes problem since printed 4 times instead of 3   
    l.append(x)
    x = ""
print(l)

我尝试了不同的变体,但它们似乎都不起作用。 最好的问候。

2 个答案:

答案 0 :(得分:3)

这对于单行代码来说有点简洁,但是可以在列表理解中使用str.join来完成。
基本上,您可以在random.choice上使用string.ascii_letters来设置所需的每个子字符串的长度,然后使用'-'.join来使用连字符将这些子字符串连接起来,然后对所需的总项数进行重复

>>> from random import choice
>>> from string import ascii_letters
>>> ['-'.join(''.join(choice(ascii_letters) for j in range(5)) for i in range(4)) for k in range(3)]
['HjPVn-sZFRG-RooXu-PicTA', 'dEZPM-sSXKx-XWWAz-qxyUd', 'BHyHE-fhGWb-sDutN-QIrJV']

答案 1 :(得分:2)

在将序列号附加到其序列号列表之前,您可以简单地rstrip()攻击'-'

# create SN like above, change l.append(x) to: 
l.append(x.rstrip('-')) # removes the -from the right end before appending

如果您需要快速大量生产,则应一次绘制所有 所需的字符,而不是一次绘制一个字符,只需在诸如所以:

import random
import string

def createSN(groups = 4, charPerGroup = 5, spacer = '-'):
    """Create a serial number with 'groups' groups consisting 
    of 'charPerGroup' chars with 'spacer' between groups."""

    total = groups * charPerGroup
    # creates all characters with one call to random
    chars = random.choices(string.ascii_letters, k = total)
    # uses list slicing and string joining to divide created characters 
    # in groups and puts the spacer character between groups
    return spacer.join( ''.join(chars[i:i+charPerGroup]) for i in range(0,total,amount))


# create a list of 3 SN:
l = [createSN() for _ in range(3)]  

print(l)

输出:

['ONHVQ-PvIvo-ZVdRU-HYCZz', 'BWQnt-nRCGG-raoVt-XEWif', 'mMPDd-KakQR-BDkRG-MdqBX']

这与@CoryKramer解决方案相似,并且(但我认为)优于@CoryKramer解决方案,他仍然可以分别绘制每个字符-使用函数可以使事情更加清楚。