当前位置: 首页 > 面试题库 >

将两个列表连接到格式化字符串中的最聪明方法

韩羽
2023-03-14
问题内容

可以说我有两个长度相同的列表:

a = ['a1', 'a2', 'a3']
b = ['b1', 'b2', 'b3']

我想产生以下字符串:

c = 'a1=b1, a2=b2, a3=b3'

实现此目标的最佳方法是什么?

我有以下实现:

import timeit

a = [str(f) for f in range(500)]
b = [str(f) for f in range(500)]

def func1():
    return ', '.join([aa+'='+bb for aa in a for bb in b if a.index(aa) == b.index(bb)])

def func2():
    list = []
    for i in range(len(a)):
        list.append('%s=%s' % (a[i], b[i]))
    return ', '.join(list)

t = timeit.Timer(setup='from __main__ import func1', stmt='func1()')
print 'func1 = ' + t.timeit(10)

t = timeit.Timer(setup='from __main__ import func2', stmt='func2()')
print 'func2 = ' + t.timeit(10)

输出为:

func1 = 32.4704790115
func2 = 0.00529003143311

你有权衡吗?


问题答案:
a = ['a1', 'a2', 'a3']
b = ['b1', 'b2', 'b3']

pat = '%s=%%s, %s=%%s, %s=%%s'

print pat % tuple(a) % tuple(b)

a1=b1, a2=b2, a3=b3

然后:

from timeit import Timer
from itertools import izip

n = 300

a = [str(f) for f in range(n)]
b = [str(f) for f in range(n)]

def func1():
    return ', '.join([aa+'='+bb for aa in a for bb in b if a.index(aa) == b.index(bb)])

def func2():
    list = []
    for i in range(len(a)):
        list.append('%s=%s' % (a[i], b[i]))
    return ', '.join(list)

def func3():
    return ', '.join('%s=%s' % t for t in zip(a, b))

def func4():
    return ', '.join('%s=%s' % t for t in izip(a, b))

def func5():
    pat = n * '%s=%%s, '
    return pat % tuple(a) % tuple(b)

d = dict(zip((1,2,3,4,5),('heavy','append','zip','izip','% formatting')))
for i in xrange(1,6):
    t = Timer(setup='from __main__ import func%d'%i, stmt='func%d()'%i)
    print 'func%d = %s  %s' % (i,t.timeit(10),d[i])

结果

func1 = 16.2272833558  heavy
func2 = 0.00410247671143  append
func3 = 0.00349569568199  zip
func4 = 0.00301686387516  izip
func5 = 0.00157338432678  % formatting


 类似资料:
  • 问题内容: 有没有人比显而易见的解决方案/库更复杂的解决方案/库,用于使用JavaScript截断字符串并在末尾添加省略号: 问题答案: 现在您可以执行以下操作: 如果“更复杂”是指在字符串的最后一个单词边界处截断,那么这可能就是您想要的: 现在您可以执行以下操作: 如果您不想扩展本机对象,则可以使用:

  • 问题内容: 串联String对象列表的最佳方法是什么?我正在考虑这样做: 我以某种方式发现这比使用StringBuilder / StringBuffer方法更整洁。 有什么想法/意见吗? 问题答案: 您的方法取决于Java的ArrayList#toString()实现。 尽管实现是用Java API记录的,并且不太可能更改,但仍有可能实现。自己实现这一点要可靠得多(循环,StringBuilde

  • 问题内容: 有没有更简单的方法将列表中的字符串项连接为单个字符串?我可以使用该功能吗? 例如,这是输入,这是所需的输出 问题答案: 用途:

  • 如何将字符串列表连接到单个字符串中?

  • 有没有更聪明的方法来定义这样的字典: 类字段定义: 稍后访问: ... 第二项不起作用,尽管数组可以通过以下方式初始化: