gpt4 book ai didi

两个列表的Python乘法

转载 作者:行者123 更新时间:2023-11-28 19:43:52 25 4
gpt4 key购买 nike

我是 Python 新手,注意到以下内容。

>>> 'D'*1
'D'

所以我想知道我们是否可以做乘法和连接字符串(供选择,元素只能是0或1)

>>> print(choice)
[1, 1, 1, 1]
>>> print(A)
['D', 'e', '0', '}']

我想要的输出是 'De0}'

最佳答案

您可以显式压缩列表,多次压缩然后加入结果:

''.join([c * i for c, i in zip(A, choice)])

zip() functionA 中的字符与 choice 中的整数配对,然后列表理解将字符与整数相乘,str.join() call将其结果组合成一个字符串。

如果使用 choice 只是 用于选择 元素,您最好使用 itertools.compress()这里:

from itertools import compress

''.join(compress(A, choice))

compress() 完全按照您的预期进行:根据第二个可迭代对象中的相应值是否为真或假,从第一个可迭代对象中挑选元素。

演示:

>>> choice = [1, 1, 1, 1]
>>> A = ['D', 'e', '0', '}']
>>> ''.join([c * i for c, i in zip(A, choice)])
'De0}'
>>> choice = [0, 1, 0, 1]
>>> ''.join([c * i for c, i in zip(A, choice)])
'e}'
>>> from itertools import compress
>>> ''.join(compress(A, choice))
'e}'

在这里使用 itertools.compress()快得多的选项:

>>> import timeit
>>> import random
>>> A = [chr(random.randrange(33, 127)) for _ in range(1000)]
>>> choice = [random.randrange(2) for _ in range(1000)]
>>> def with_mult(A, choice):
... return ''.join([c * i for c, i in zip(A, choice)])
...
>>> def with_compress(A, choice):
... return ''.join(compress(A, choice))
...
>>> timeit.timeit('f(A, choice)', 'from __main__ import A, choice, with_mult as f', number=10000)
1.0436905510141514
>>> timeit.timeit('f(A, choice)', 'from __main__ import A, choice, with_compress as f', number=10000)
0.2727453340048669

速度提高了 4 倍。

关于两个列表的Python乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25804647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com