如何将随机字符中的字符串与列表连接起来?
How to concatenate strings from random character with list?
我有这个脚本,它从 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))
改为使用特殊字符列表,但这也不起作用。
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)][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]}"
我有这个脚本,它从 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))
改为使用特殊字符列表,但这也不起作用。
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)][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]}"