Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python替换.join()_Python - Fatal编程技术网

使用python替换.join()

使用python替换.join(),python,Python,我正在学习python,正在学习教程。我遇到了这个代码段,想知道是否可以使用一个简单的循环来替换它,而不必使用inbuild.join() 有人能帮我吗?你可以: value = '' for x, y in items: value += x * y return choice(value) 但是要知道,这会比较慢,因为现在必须为项的每次迭代都构建一个新的字符串值。'.join()只需构建一个新的字符串对象 如果choice()是random.choice(),x是一个字符串,y是一

我正在学习python,正在学习教程。我遇到了这个代码段,想知道是否可以使用一个简单的循环来替换它,而不必使用inbuild.join()

有人能帮我吗?

你可以:

value = ''
for x, y in items:
    value += x * y
return choice(value)
但是要知道,这会比较慢,因为现在必须为
项的每次迭代都构建一个新的字符串值。
'.join()
只需构建一个新的字符串对象

如果
choice()
random.choice()
x
是一个字符串,
y
是一个整数,并且这是一个加权随机选择函数,您还应该能够使用列表:

value = []
for x, y in items:
    value += list(x) * y
return choice(value)
你可以:

value = ''
for x, y in items:
    value += x * y
return choice(value)
但是要知道,这会比较慢,因为现在必须为
项的每次迭代都构建一个新的字符串值。
'.join()
只需构建一个新的字符串对象

如果
choice()
random.choice()
x
是一个字符串,
y
是一个整数,并且这是一个加权随机选择函数,您还应该能够使用列表:

value = []
for x, y in items:
    value += list(x) * y
return choice(value)

非常感谢。但它不适用于元组列表。我正在编写一个代码来生成给定元组的加权选择字符串。下面是代码:def genseq(items):返回选项(“”。join(x*y表示x,y表示items))继续执行“较慢”位:Python不能保证
+=
优于二次型(它与最近的CPython 2.x版本和所有3.x实现成线性关系,但2.x文档明确表示不要依赖于此…)。因此,如果您确实需要有保证的线性性能的东西,并且由于某种原因不能使用
join
,唯一的选择是创建
StringIO
写入它,然后在完成后调用
getvalue
。@Rachel:这与原始代码的工作情况完全相同。特别是,如果
items
是一个元组列表,那么原始代码将从
join
调用中引发
TypeError
,而Martijn的代码将从
+=
调用中引发相同的
TypeError
@Rachel:如果我的代码不起作用,那么你的代码也不起作用;这两个函数之间没有功能上的区别。@Rachel:如果你想更正这个问题,你必须向我展示你函数的输入。谢谢。但它不适用于元组列表。我正在编写一个代码来生成给定元组的加权选择字符串。下面是代码:def genseq(items):返回选项(“”。join(x*y表示x,y表示items))继续执行“较慢”位:Python不能保证
+=
优于二次型(它与最近的CPython 2.x版本和所有3.x实现成线性关系,但2.x文档明确表示不要依赖于此…)。因此,如果您确实需要有保证的线性性能的东西,并且由于某种原因不能使用
join
,唯一的选择是创建
StringIO
写入它,然后在完成后调用
getvalue
。@Rachel:这与原始代码的工作情况完全相同。特别是,如果
items
是一个元组列表,那么原始代码将从
join
调用中引发
TypeError
,而Martijn的代码将从
+=
调用中引发相同的
TypeError
@Rachel:如果我的代码不起作用,那么你的代码也不起作用;这两个函数之间没有功能上的区别。@Rachel:如果你想更正这个问题,你必须向我展示你函数的输入。最大的问题是:为什么?
join
函数在实现中执行一个循环,该循环经过了很好的优化,至少与用Python编写的任何循环一样快(例如,它在CPython中要快得多,在PyPy中只稍微快一点,但仍然快一点…),并且具有相同的效果。那么,你为什么要编写更冗长、更难编写、更慢的代码呢?我有一种感觉@InbarRose:我怀疑这实际上可能是一种“我想自己弄清楚如何实现
join
”(或者“我被指派自己实现
join
”)的学习情况,在这种情况下,这是一个合理的问题……但你是对的,正如所写的,这个问题可能是一个XY问题。最大的问题是:为什么?
join
函数在实现中执行一个循环,该循环经过了很好的优化,至少与用Python编写的任何循环一样快(例如,它在CPython中要快得多,在PyPy中只稍微快一点,但仍然快一点…),并且具有相同的效果。那么,你为什么要编写更冗长、更难编写、更慢的代码呢?我有一种感觉@InbarRose:我怀疑这实际上可能是一种“我想自己弄清楚如何实现
join
”(或者“我被指派自己实现
join
”)的学习情况,在这种情况下,这是一个合理的问题……但你是对的,正如所写,这个问题可能是一个XY问题。