在Python中将列表中的元组字符串转换为列表项

2024-10-02 00:27:33 发布

您现在位置:Python中文网/ 问答频道 /正文

Listl包含由两种类型的列表组成的项,第一种是由字符串组成的可接受列表,第二种是包含字符串的元组字符串。第二种类型的所有列表都具有相同的长度-2。我想将第二种类型的所有列表转换为与第一种类型相同的约定,如下所示(l2是更新后的列表)。在

编辑:我应该澄清的是,我处理的实际列表远不止两项,所以我需要一个循环函数来适应这一点。在

l = [["('N', '', 'SHOWERS', '', 'RD', '11734', '11734', '', '')", "('61060', '61060')"], ['', '', 'NORA', '', 'RD', '10301', '10999', '10400', '10998', '61089', '61089']]

l2 = [['N', '', 'SHOWERS', '', 'RD', '11734', '11734', '', '', '61060', '61060'], ['', '', 'NORA', '', 'RD', '10301', '10999', '10400', '10998', '61089', '61089']]

以下只是我目前为止的想法:

^{pr2}$

Tags: 函数字符串编辑类型列表rd元组l2
3条回答

如果,且仅当信任输入,则可以对其进行评估:

l2 = eval(l[0][0])

我不完全理解整个输入的结构,所以我无法帮助您循环所有输入。在

您可以使用ast:

>>> import ast
>>> l = [["('N', '', 'SHOWERS', '', 'RD', '11734', '11734', '', '')", "('61060', '61060')"], ['', '', 'NORA', '', 'RD', '10301', '10999', '10400', '10998', '61089', '61089']]
>>> l2=[e for e in ast.literal_eval(l[0][0])]
>>> l2+=[e for e in ast.literal_eval(l[0][1])]
>>> l2=[l2]
>>> l2.append(l[1])

>>> l2
[['N', '', 'SHOWERS', '', 'RD', '11734', '11734', '', '', '61060', '61060'], ['', '', 'NORA', '', 'RD', '10301', '10999', '10400', '10998', '61089', '61089']]

您可能知道,eval有一些真正的安全问题。ast非常安全,因为它只能生成基于Python的数据结构。在

这不是csv问题,因为您没有csv。(事实上,你把我弄糊涂了一段时间,因为我正试图想象csv文件是什么样子的!)在

  1. {cd1>是否需要建立一个函数的标准化。在
  2. 使用^{}将元组字符串安全地转换为实际的元组。在
  3. 使用^{}将所有元组组合成一个序列。在

下面的完整代码实现为生成器normalized_list()。在

l = [["('N', '', 'SHOWERS', '', 'RD', '11734', '11734', '', '')", "('61060', '61060')"], ['', '', 'NORA', '', 'RD', '10301', '10999', '10400', '10998', '61089', '61089']]

l2 = [['N', '', 'SHOWERS', '', 'RD', '11734', '11734', '', '', '61060', '61060'], ['', '', 'NORA', '', 'RD', '10301', '10999', '10400', '10998', '61089', '61089']]

import ast
from itertools import imap, chain


def is_tuple_string_row(L):
    """Return whether list L is a list of strings containing tuples"""
    return len(L)==2 and all(s.startswith("('") and s.endswith("')") for s in L)


def normalized_list(L):
    """Yield lists in sequence L as lists of strings

    Normalizes a list of strings of tuples down to a simple list of strings
    """
    for item in L:
        if is_tuple_string_row(item):
            yield list(chain.from_iterable(imap(ast.literal_eval, item)))
        else:
            yield item


# You can iterate efficiently
for item in normalized_list(l):
    print item

# or you can put the whole thing to a single new list
aslist = list(normalized_list(l))

# verify results
assert aslist == l2

相关问题 更多 >

    热门问题