【问题标题】:Python .join[] multiplys total string characters across multiple linesPython .join[] 将多行的总字符串字符相乘
【发布时间】:2016-01-08 07:09:00
【问题描述】:

我正在从事一个个人项目,以帮助我理解 python 3.4.2 循环和连接来自多个来源的字符串。

我的目标是使用“字符串”连接并在内部调用__len__() 来构建一个字符串,它会乘以我的结果。我希望长度为 5,然后是 10,然后是 15。现在它会出现 5,然后是 25,然后是 105。如果我继续下去,我会得到 425、1705、6825 等...

我希望我遗漏了一些简单的东西,但任何帮助都会很棒。我也在尝试有效地进行连接(我知道打印不是,那些是出于调试目的。)

我在网上使用了一个可视化的 python 工具来单步执行它,看看我是否能弄清楚。我只是错过了一些东西。 http://www.pythontutor.com/visualize.html#mode=edit

提前谢谢你!

import random

def main():
    #String values will be pulled from
    string = 'valuehereisheldbythebeholderwhomrolledadtwentyandcriticalmissed'

    #Initial string creation
    strTest = ''
    print('strTest Blank: ' + strTest)

    #first round string generation
    strTest = strTest.join([string[randomIndex(string.__len__())] for i in range(randomLength())])
    print('strTest 1: ' + strTest)
    print('strTest 1 length: ' + str(strTest.__len__()))

    #second round string generation
    strTest = strTest.join([string[randomIndex(string.__len__())] for i in range(randomLength())])
    print('strTest 2: ' + strTest)
    print('strTest 2 length: ' + str(strTest.__len__()))

    #final round string generation
    strTest = strTest.join([string[randomIndex(string.__len__())] for i in range(randomLength())])
    print('strTest 3: ' + strTest)
    print('strTest 3 length: ' + str(strTest.__len__()))

def randomIndex(index):
    #create random value between position 0 and total string length to generate string
    return random.randint(0,index)

def randomLength():
    #return random length for string creation, static for testing
    return 5
    #return random.randint(10,100)

main()
# output desired is 
# strTest 1 length: 5
# strTest 2 length: 10
# strTest 3 length: 15

【问题讨论】:

  • 您认为join 会做什么?因为s.join(strings) 不只是将strings 粘贴在s 的末尾。
  • 啊,你是对的。我测试了 string = 'abcd' test = ''.join(string) test = test.join(string) test = test.join(string) 并得到了 4,16,52。我明白你的意思,这不仅仅是将它们放在字符串的末尾。我需要更多地查看 join ,看看我是否能弄清楚如何维护索引和增长字符串。可能会更容易将所有这些都放在一个数组中,然后在我需要使用它时将其拉出。

标签: python string python-3.x random concatenation


【解决方案1】:

代码运行没有任何问题,实际上发生的情况是,每次调用 strTest.join(...) 时,实际上是在加入每个随机字符,以及从 string 获得的下一个字符,之前的值为 strTest。

引用自 Python 文档:

str.join(iterable) 返回一个字符串,它是 可迭代迭代中的字符串。如果存在 TypeError 将引发 是可迭代的任何非字符串值,包括字节对象。 该 元素之间的分隔符是提供此方法的字符串。

示例:

>>> s = 'ALPHA'
>>> '*'.join(s)
'A*L*P*H*A'
>>> s = 'TEST'
>>> ss = '-long-string-'
>>> ss.join(s)
'T-long-string-E-long-string-S-long-string-T'

所以你可能想要这样的东西:

strTest = strTest + ''.join([string[randomIndex(string.__len__())] for i in range(randomLength())])

【讨论】:

  • 谢谢,原来如此。我已更改为添加 + ''.join ,它现在正在执行我想要的方式。再次感谢您!
  • @toredOut ..no pblm..继续阅读文档以掌握方法的正确功能
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-24
  • 1970-01-01
相关资源
最近更新 更多