将一系列字符串转换为字符数组最容易理解的方法?

时间:2014-12-03 01:18:30

标签: python arrays string character

我有这个:

sequence = 'Hello', 'Hi'

我想要这个:

array = 'H','e','l','l','o','H','i'

我无法正确格式化。我不断得到一系列字符串而不是一大串字符。

6 个答案:

答案 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)