您知道如何将字符串列表拆分为不同的变量吗?

Posted

技术标签:

【中文标题】您知道如何将字符串列表拆分为不同的变量吗?【英文标题】:Do you know how to split a list of strings into different variables? 【发布时间】:2022-01-08 23:07:45 【问题描述】:

我是python的初学者,我有一个可能很简单的问题。我有一个“file.txt”,原则上可以有 n 个字符串。

> file.txt

John
Rafa
Marta
... 
n

这被加载到程序中:

with open('/media/names.txt') as f:
    lines = f.read().splitlines()

现在,我从 csv 加载一个数据框,该数据框有一列(名称为“标识符”),其中包含很多名称。

Registration = pd.read_csv('/media/Registration.csv', 
    sep='\t', header=0)

目标是为每个变量分别找到 n 个字符串。例如,在这种情况下,我对列表中的第一个数据进行了处理:

names_1 = Registration[Registration['Identifier'].str.contains(lines[1])]
print(names_1)

仅保留以“John”为标识符的行。但是,我正在尝试创建 n 个数据框,因为“file.txt”列表中有项目。

names_1 = Registration[Registration['Identifier'].str.contains(lines[1])]

names_2 = Registration[Registration['Identifier'].str.contains(lines[2])]

names_3 = Registration[Registration['Identifier'].str.contains(lines[3])]

names_n = Registration[Registration['Identifier'].str.contains(lines[n])]

但我有点卡住了,我不知道如何执行此循环。谁来帮帮我?谢谢!

【问题讨论】:

【参考方案1】:

从理论上讲,您的问题的答案是局部变量存储在可通过函数 locals() 访问的字典中。因此,可以完全按照要求在循环中生成变量。

for i, line in enumerate(lines):
    locals()[f'names_i'] = Registration[Registration['Identifier'].str.contains(line)]

然而,你可以这样做并不意味着你应该这样做,以这种方式生成变量通常不是一个好主意。

问问自己,你将如何访问第 n 个变量?您正在走上一条使您的数据难以处理的道路。更好的方法是使用字典或列表等数据结构来轻松跟踪它。

names = []
for line in lines:
    names.append(Registration[Registration['Identifier'].str.contains(line)])

还要注意第一个索引是 0,而不是 1。

【讨论】:

【参考方案2】:

Python 列表索引从 0 开始。

试试这样的for循环:

for i in range(len(lines)):
  names = Registration[Registration['Identifier'].str.contains(lines[i])]

但是你需要保持names 的值。也许在一个列表中:

name_list = []
for i in range(len(lines)):
  names = Registration[Registration['Identifier'].str.contains(lines[i])]
  name_list.append(names)
print(name_list)

试试这个!享受编码!

【讨论】:

为什么range(len(lines)-1) - 不应该是range(len(lines)) 因为 Python 列表是从 0 开始索引的整数数组,并且 len 返回元素的数量,如果列表有 3 个这样的元素:[0, 1, 2] 最大 id 是 2,而不是 3。 list(range(3)) 也是 [0, 1, 2] - 而不是 [0, 1, 2, 3] 对不起,你是对的:/我会编辑我的答案...这是因为我想从 1 开始而不是 0,然后我混合了概念...oO跨度> 太棒了!我还试图确保我没有遗漏任何东西。有时,甚至橡皮鸭也能帮助调试:P - en.wikipedia.org/wiki/Rubber_duck_debugging

以上是关于您知道如何将字符串列表拆分为不同的变量吗?的主要内容,如果未能解决你的问题,请参考以下文章

按大小拆分字符串(1024字节)

C将一个char数组拆分为不同的变量

如何识别字符串数据集中的文本模板模式?

将逗号分隔的字符串拆分为mysql中的行

如何将字符串拆分为列表?

如何将字符串拆分为字符串和整数? [复制]