【问题标题】:How to concatenate strings from random character with list?如何将随机字符中的字符串与列表连接起来?
【发布时间】:2020-12-11 00:28:13
【问题描述】:

我有这个脚本可以从 URL 中提取随机单词,并与存储在列表中的其他特殊字符连接:

import requests
import random
from random import randint
import string

url = 'https://svnweb.freebsd.org/csrg/share/dict/words?view=co&content-type=text/plain'
r = requests.get(url)

text = r.text
words = text.split()
random_num = randint(0, len(words))
random_num2 = [randint(0,10)]

special_list = ['#','!','@','-', '@']
union = "".join(str(x) for x in special_list)
special_char = random.choices(union, k=2)
special_char2 = random.choices(union)

final_string = (str(special_char).strip('[]') + words[random_num] + '__' + 
                str(random_num2).strip('[]') + str(special_char2).strip('[]'))

输出是这样的:'-', '@'auxiliary__2'-'

问题是即使我使用.join 我也无法摆脱'' 并将所有内容连接在一起。

我也试过了:

   random_char = ''.join(string.punctuation for i in range(0,1))

而不是使用特殊字符列表,但这也没有用。

【问题讨论】:

  • 范围是排他的,所以range(0,1) == [0]
  • 另外,您的预期输出是什么?

标签: python list concatenation string-concatenation


【解决方案1】:

不确定您希望最终输出是什么,但请尝试:

random_num2 = [randint(0,10)][0]  

然后:

final_string = f"{''.join(map(str, special_char))}{words[random_num]}__{random_num2}{''.join(map(str, special_char2))}"

或者你可以通过索引获取特殊字符:

final_string = f"{''.join(map(str, special_char))}{words[random_num]}__{random_num2}{special_char2[0]}"

【讨论】:

  • 谢谢,这也有效! f{} 是字典吗?如果是这样,我不明白为什么将其用于此目的。
  • 不,它是一个 f-string。 Python 3 中的字符串格式快捷方式。它允许您直接将变量等注入字符串。 realpython.com/python-f-strings
【解决方案2】:

random.choices 给你一个列表。您可以像这样访问列表中的内容:special_char[0] 而不是将列表转换为字符串并弄乱字符串。这样,您将不会获得在列表的字符串表示中获得的撇号。 str(special_char) ==> ['-', '@'](例如)。如果你做", ".join(special_char),你只会得到-, @。如果您不想在中间使用逗号,只需 "".join(special_char) 提供 -@

另外,random_num2 = [randint(0,10)] 会创建一个只有一个数字的列表。 如果您只想访问列表中的号码,则需要random_num2[0]。 或者您可以将它们全部转换为字符串并使用",".join(),就像我们为special_char 所做的那样

random_num2_str = [str(num) for num in random_num2]
special_char = random.choices(union, k=2) 
special_char2 = random.choices(union)

final_string = ", ".join(special_char) + words[random_num] + '__' + ", ".join(random_num2_str) + special_char2[0]

除非您真的需要random_num2 作为列表,否则您应该使用random_num2 = randint(0,10)。然后,你可以做

final_string = ", ".join(special_char) + words[random_num] + '__' + str(random_num2) + special_char2[0]

【讨论】:

  • 谢谢,它似乎工作。 random_num2 = [randint(0,10)] 背后的原因是我只想要一个数字。 random_num2[0] 和有什么区别?它也应该返回一个数字。
  • randint(0,10) 返回一个介于 0 和 10 之间的随机整数。您在将列表分配给 random_num2 之前将其放入列表中。要访问列表中的xth 元素,您需要执行random_num2[x]random_num2[0],因为它只有一个您要访问的元素。
  • 好的,谢谢,我现在明白了。顺便说一句,我不知道为什么你的答案被否决了,我选择它是有用的。
  • @Steven,不客气。您应该投票赞成您认为有帮助的答案。今天有人对我所有的答案都投了反对票。不过不用担心,所有非法的反对票都将在今天凌晨 3 点 UTC 被删除。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-31
  • 1970-01-01
  • 1970-01-01
  • 2019-05-18
  • 1970-01-01
相关资源
最近更新 更多