如何从列表的索引中创建列表

时间:2018-04-06 20:24:59

标签: python python-3.x list

我启动了一个项目,我将一个字符串转换为一个列表,在列表中我将每个索引转换为另一个列表。但是,我遇到了一个问题。我的代码如下:

# Define the string
string = "Hello there!"

# Print string (Hello there!)
print(string)

# Define string_list and assign it to the list version of a string
string_list = list(string)

# Print string_list
print(string_list)
''' # ['H', 'e', 'l', 'l', 'o', ' ', 't', 'h', 'e', 'r', 'e', '!'] '''

for i in string_list:
    i = list(i)

print(string_list)
''' ['H', 'e', 'l', 'l', 'o', ' ', 't', 'h', 'e', 'r', 'e', '!'] '''

当我尝试将string_list的每个索引转换为另一个列表时,它无法正常工作。我想要的是string_list的最终打印输出看起来像这样:

[['H'], ['e'], ['l'], ['l'], ['o'], [' '], ['t'], ['h'], ['e'], ['r'], ['e'], ['!']]

我可以采用与原始方法类似的方法吗?另外,为什么我原来的方法没有做我想做的事情?提前谢谢。

2 个答案:

答案 0 :(得分:1)

  

我有没有办法像我原来的方法那样做?

是;有两种方法是使用map()list comprehension

>>> s = "Hi there"

>>> list(map(list, s))
[['H'], ['i'], [' '], ['t'], ['h'], ['e'], ['r'], ['e']]

>>> [[i] for i in s]  # or: [list(i) for i in s]
[['H'], ['i'], [' '], ['t'], ['h'], ['e'], ['r'], ['e']]
  

另外,为什么我的原始方法没有按照我的意愿去做?

问题在这里:

for i in string_list:
    i = list(i)

您可以在this question中详细了解,在循环中向i分配不会影响string_list自身的元素。具体而言,for i in string_list在循环的每个回合处创建一个新变量i,其中最后一个在循环终止后仍然存在。简而言之,最好避免尝试修改您循环的容器(string_list)。

答案 1 :(得分:0)

# define the string
s1 = "Hello there!"

# holds nested lists
new_list = []

# print string
print(s1)
''' Hello there! '''

# convert string to a list
string_list = list(s1)

# print the list
print(string_list)
''' # ['H', 'e', 'l', 'l', 'o', ' ', 't', 'h', 'e', 'r', 'e', '!'] '''

# load each element to list as a list
for i in string_list:
    new_list.append([i]) # <<<<< the '[i]' is important

print(new_list)
'''
[['H'], ['e'], ['l'], ['l'], ['o'], [' '], ['t'], ['h'], ['e'], ['r'], ['e'], ['!']]
'''