我启动了一个项目,我将一个字符串转换为一个列表,在列表中我将每个索引转换为另一个列表。但是,我遇到了一个问题。我的代码如下:
# 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'], ['!']]
我可以采用与原始方法类似的方法吗?另外,为什么我原来的方法没有做我想做的事情?提前谢谢。
答案 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'], ['!']]
'''