我有这个:
sequence = 'Hello', 'Hi'
我想要这个:
array = 'H','e','l','l','o','H','i'
我无法正确格式化。我不断得到一系列字符串而不是一大串字符。
答案 0 :(得分:4)
>>> sequence = 'Hello', 'Hi'
>>> sequence
('Hello', 'Hi')
此表达式称为Tuple assignment
:
左侧是变量元组;右边是表达的元组。
因此,您需要迭代元组(sequence
)以从元素(word
)中获取每个字符。
>>> string_array = [char for i in sequence for char in i]
>>> string_array
['H', 'e', 'l', 'l', 'o', 'H', 'i']
itertools
的效率相比较低。
>>> from itertools import chain
>>> import timeit
>>> using_chain = lambda: tuple(chain.from_iterable(sequence))
>>> timeit.timeit(using_chain)
1.7286441326141357
>>> using_for = lambda: [ char for i in sequence for char in i]
>>> timeit.timeit(using_for)
1.345189094543457
或者你可以在这里使用生成器表达式。
>>> string_array = (char for i in sequence for char in i)
>>> string_array
<generator object <genexpr> at 0x0231BD78>
>>> tuple(string_array)
('H', 'e', 'l', 'l', 'o', 'H', 'i')
有关Tuple assignment
的更多信息:
左侧是变量元组;右边是表达式(the right side can be any kind of sequence (string, list or tuple))
的元组。每个值都分配给其各自的变量。在任何分配之前评估右侧的所有表达式。
>>> a, b, c = 1, 2, 3
>>> a
1
>>> b
2
>>> c
3
左侧的变量数量和右侧的值数量必须相同:
>>> a,b = 1, 2, 3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: too many values to unpack
注意: - 解包只发生在左侧有多个变量的情况下,否则整个序列被分配给该单个变量。(this is what happened in your case
)
>>> a = 'I', 'love', 'Python'
>>> a
('I', 'love', 'Python')
答案 1 :(得分:1)
sequence = 'Hello' , 'Hi'
你正在创建一个元组
所以只需遍历每个元素:
arr = []
for string in sequence:
for char in string:
arr.append(char)
答案 2 :(得分:1)
只需使用itertools.chain.from_iterable()
In [152]: a
Out[152]: ('Hello', 'Hi')
In [136]: from itertools import chain
In [146]: list(chain.from_iterable(a))
Out[146]: ['H', 'e', 'l', 'l', 'o', 'H', 'i']
与大值的正常迭代相比
In [154]: %timeit list(chain.from_iterable(a*10**5))
10 loops, best of 3: 49.8 ms per loop
In [155]: %timeit [char for i in a*10**5 for char in i]
10 loops, best of 3: 68 ms per loop
答案 3 :(得分:0)
你可以这样做
arr = []
for i in sequence:
for j in i:
arr.append(j)
答案 4 :(得分:0)
最简单的形式是:
array = sequence[0] + sequence[1]
答案 5 :(得分:0)
这是一个非常简单的解决方案:
result_array = []
for word in sequence:
result_array += list(word)