有没有更简单的方法将列表中的字符串项连接成一个字符串?
我可以使用该str.join()功能加入列表中的项目吗?
例如,这是输入['this','is','a','sentence'],这是所需的输出this-is-a-sentence
sentence = ['this','is','a','sentence']
sent_str = ""
for i in sentence:
sent_str += str(i) + "-"
sent_str = sent_str[:-1]
print sent_str
Run Code Online (Sandbox Code Playgroud) 由于Python string无法更改,我想知道如何更有效地连接字符串?
我可以这样写:
s += stringfromelsewhere
Run Code Online (Sandbox Code Playgroud)
或者像这样:
s = []
s.append(somestring)
later
s = ''.join(s)
Run Code Online (Sandbox Code Playgroud)
在写这个问题时,我发现了一篇很好的文章谈论这个话题.
http://www.skymind.com/~ocrow/python_string/
但它是在Python 2.x.中,所以问题是在Python 3中做了哪些改变?
我想int加入一个string.这就是我现在正在做的事情:
num = 40
plot.savefig('hanning40.pdf') #problem line
Run Code Online (Sandbox Code Playgroud)
我必须运行几个不同数字的程序,而不是两个40.所以我想做一个循环但插入这样的变量不起作用:
plot.savefig('hanning', num, '.pdf')
Run Code Online (Sandbox Code Playgroud)
如何将变量插入Python字符串?
Python中常见的反模式是+在循环中连接一系列字符串.这很糟糕,因为Python解释器必须为每次迭代创建一个新的字符串对象,并最终获得二次时间.(在某些情况下,CPython的最新版本显然可以优化它,但是其他实现不能,因此不鼓励程序员依赖它.)''.join是正确的方法.
不过,我听人说(这里包括对堆栈溢出),你应该永远不会使用+字符串连接,而是始终使用''.join或格式字符串.我不明白为什么如果你只是连接两个字符串就是这种情况.如果我的理解是正确的,它不应该花费二次时间,我认为a + b比任何一个''.join((a, b))或更清晰,更可读'%s%s' % (a, b).
+用于连接两个字符串是一种好习惯吗?还是有一个我不知道的问题?
我有一个Excel文件
Arm_id DSPName DSPCode HubCode PinCode PPTL
1 JaVAS 01 AGR 282001 1,2
2 JaVAS 01 AGR 282002 3,4
3 JaVAS 01 AGR 282003 5,6
Run Code Online (Sandbox Code Playgroud)
我想在表单中保存一个字符串Arm_id,DSPCode,Pincode.此格式是可配置的,即它可能会更改为DSPCode,Arm_id,Pincode.我将格式保存在列表中
FORMAT = ['Arm_id', 'DSPName', 'Pincode']
Run Code Online (Sandbox Code Playgroud)
如果可配置,我如何阅读具有提供名称的特定列的内容FORMAT.
这是我试过的.目前我能够阅读文件中的所有内容
from xlrd import open_workbook
wb = open_workbook('sample.xls')
for s in wb.sheets():
#print 'Sheet:',s.name
values = []
for row in range(s.nrows):
col_value = []
for col in range(s.ncols):
value = (s.cell(row,col).value)
try : value = str(int(value))
except : pass
col_value.append(value)
values.append(col_value)
print …Run Code Online (Sandbox Code Playgroud) 通过重复的字符串连接来构建字符串是一种反模式,但我仍然很好奇为什么它的性能在字符串长度超过大约10**6后从线性切换到二次方:
# this will take time linear in n with the optimization
# and quadratic time without the optimization
import time
start = time.perf_counter()
s = ''
for i in range(n):
s += 'a'
total_time = time.perf_counter() - start
time_per_iteration = total_time / n
Run Code Online (Sandbox Code Playgroud)
例如,在我的机器上(Windows 10,python 3.6.1):
10 ** 4 < n < 10 ** 6,time_per_iteration几乎完全恒定在170±10μs10 ** 6 < n,time_per_iteration几乎是完全线性的,达到520μs n == 10 ** 7.线性增长time_per_iteration相当于二次增长total_time. …
我想创建一个函数,-在 UUID 字符串的位置 8、12、16、20 上添加一个。
例子:
Original: 76684739331d422cb93e5057c112b637
New: 76684739-331d-422c-b93e-5057c112b637
Run Code Online (Sandbox Code Playgroud)
我不知道如何将它放置在看起来不像意大利面条代码的字符串中的多个位置。
我读过这个回复,它解释了 CPython 有一个优化,可以在使用a = a + bor附加到字符串时执行就地附加,无需复制a += b。我还阅读了这个 PEP8 建议:
\n\n代码的编写方式不应损害其他 Python 实现(PyPy、Jython、IronPython、Cython、Psyco 等)。例如,不要依赖 CPython\xe2\x80\x99 对形式 a += b 或 a = a + b 中的语句进行就地字符串连接的高效实现。即使在 CPython 中,这种优化也是脆弱的(它仅适用于某些类型),并且在不使用引用计数的实现中根本不存在。在库的性能敏感部分,应使用\'\'.join() 形式。这将确保在各种实现中以线性时间进行串联。
\n
因此,如果我理解正确,a += b + c正确的方法是调用a = \'\'.join([a, b, c])?
但是为什么这个形式join比本例中的形式慢得多+=(在loop1中我故意使用a = a + b + c以避免触发CPython优化)?
import os\nimport time\n\nif __name__ == "__main__":\n start_time = time.time()\n print("begin: %s " …Run Code Online (Sandbox Code Playgroud) 我有以下功能,循环通过两个列表,打印出一系列蔬菜,然后是水果.
def Selection():
print("VEGETABLES FOR THE WEEK:\n")
for veg in veg_selection:
print(veg.upper())
print("\n")
print("FRUITS FOR THE WEEK:\n")
for fruit in fruit_selection:
print(fruit.upper())
Run Code Online (Sandbox Code Playgroud)
所以结果可能如下:
VEGETABLES FOR THE WEEK:
BROCOLLI
PEAS
CARROTS
SWEET CORN
WHITE ONIONS
FRUITS FOR THE WEEK:
GRAPEFRUIT
CHERRIES
ORANGE
COCONUT
RASPBERRIES
Run Code Online (Sandbox Code Playgroud)
我正在努力将函数的打印结果分配给包含格式化字符串的单个变量.我是否需要将结果保存为文本文件然后再次读取?我可以使用文本连接吗?我不确定如何处理函数中的for循环?任何帮助真的很感激.