繁体   English   中英

如何在Python 3中将字符串列表转换为单独的字符串?

[英]How do you convert a list of strings to separate strings in Python 3?

我想知道您是否有一个字符串列表,例如:

l = ['ACGAAAG', 'CAGAAGC', 'ACCTGTT']

您如何将其转换为:

O = 'ACGAAAG'
P = 'CAGAAGC'
Q = 'ACCTGTT'

您可以在不知道列表中项目数的情况下执行此操作吗? 您必须将它们存储为变量。 (变量无关紧要。)

欢迎来到SE!

已知结构

如果您知道字符串的结构,则可以简单地将其解压缩:

O, P, Q = my_list

结构未知

使用for循环解压缩列表。 对循环中的每个字符串进行处理。 在下面,我只是简单地打印每个:

for element in l:
    print(element)

祝好运!

如果您事先不知道项目数,则列表是保留项目正确结构。

但是,您可以切断一些已知的项目,并将未知的尾部保留为列表:

a, b, *rest = ["ay", "bee", "see", "what", "remains"]
print("%r, %r, rest is %r" % (a, b, rest))
a,b,c = my_list

只要列表中的元素数量等于您要解压缩的变量的数量,此方法就可以工作,它实际上可以与任何可迭代,元组,列表,集合等一起使用

如果列表较长,那么您始终可以访问前三个元素

a = my_list[0] 
b = my_list[1]
c = my_list[2]

或一行

a, b, c = my_list[0], my_list[1], my_list[2]

使用切片符号甚至更好,您可以使用前3个元素获得右侧的子列表

a, b, c = my_list[:3]

只要列表的大小至少为3,或者您想要的变量数量,这些变量就可以工作

您还可以使用扩展的解压缩符号

a, b, c, *the_rest = my_list

其余的将是一个列表,其中除前3个元素外,列表中的所有其他内容,列表的大小必须再次为3或更大

这几乎涵盖了提取特定数量项目的所有方式

现在,根据要处理的内容,定期循环可能会更好

for item in my_list:
    #do something with the current item, like printing it
    print(item)

在每个迭代中,项目将采用列表中一个元素的值,以供您执行当时需要执行的一项操作


如果您想要的是每次迭代同时获取3个项目,则有几种方法可以实现

例如

for i in range(3,len(my_list),3)
    a,b,c = my_list[i-3:i]
    print(a,b,c)

还有更多有趣的结构,例如

it = [iter(my_list)]*3
for a,b,c in zip(*it):
    print(a,b,c)

以及其他的itertools模块。

但是,现在您说了一些有趣的话, “使每个术语都分配给一个变量” ,这是错误的方法,您不希望运行未知数量的变量会很快变得混乱,您可以使用列表,如果需要的话为了对每个元素做一些工作,有很多方法可以做到,例如列表理解

my_new_list = [ some_fun(x) for x in my_list ]

或以旧方式

my_new_list = []
for x in my_list:
    my_new_list.append( some_fun(x) )

或者如果您一次需要处理多于一项的内容,请将其与上述某些内容结合使用

我不知道您的用例是否要求将字符串存储在不同的变量中。 通常这是一个坏主意。

但是,如果确实需要它,则可以使用exec内置exec ,该exec采用python语句的字符串表示形式并执行它。

list_of_strings = ['ACGAAAG', 'CAGAAGC', 'ACCTGTT']

动态生成与Excel工作表中的列名等效的变量名。 (A,B,C .... Z,AA,AB ........,AAA ....)

在此特定情况下variable_names = ['A', 'B', 'C']

for vn, st in zip(variable_names, list_of_strings):
        exec('{} = "{}"'.format(vn, st))

测试一下, print(A,B,C)将输出三个字符串,您可以在程序的其余部分中将A,B and C用作变量

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM