如何展平由字符串组成的列表列表?

2024-10-01 07:25:17 发布

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

我有一个包含字符串的列表。看起来是这样的:

["['eth', 'ethereum', 'nft', 'nonfungibletoken', 'token', 'crypto', 'digitalassets', 'etf', 'digitalcoin', 'ewallet', 'digitalgold', 'internetmoney', 'defi', 'decentralizedfinance', 'peertopeer', 'digitalcurrency', 'decentralizedmoney']",
 "['nft']",
 "['coinvotecc', 'craftnft']",
 "['coinvotecc', 'craftnft']",
 "['fitoken', 'fnk', 'nft', 'bsc', 'bnb']",
 "['nft', 'nft', 'nftarts', 'nftart', 'token', 'opeansea', 'nftcollecting', 'nftbuy', 'nfthorse', 'nftlion', 'nftold', 'nftlionesstiger', 'lion', 'lions']",
 "['nft']",]

我不确定这个“.”是干什么用的

我试图通过将其转换为一个大列表来将其展平。我尝试了许多不同的方法来实现这一点,但我遇到了一些错误,如:“Float对象不可迭代”和“str没有属性len()”

我不确定错误是什么。如果有任何帮助,我们将不胜感激


Tags: 字符串token列表错误cryptoethethereumetf
3条回答

您可以在Python中使用内置的itertools模块。使用chain.from_iterable可以在一个iterable中展平所有iterable

from itertools import chain 


def eval_value(value):
    # Note: if str_lst is an empty string it will give a SyntaxError: unexpected EOF while parsing
    evaluated = eval(value)
    if not isinstance(evaluated, list):
        return [evaluated]
    else:
        return evaluated

    
eval_strings = [eval_value(str_lst) for str_lst in the_list if isinstance(str_lst, str)]
flat = list(chain.from_iterable(eval_strings))

大列表中包含的是一些字符串。 你能做的只是:

big_list = []
for s in lst:
    big_list += s[0][1:-1].split(', ')

它将获取列表中的字符串,并将每个字符串放入一个字符串列表中,然后将它们添加到一个大列表中,这样所有单个字符串都将位于其中

您的列表不包含列表,只包含一个字符串。因此,您必须首先将其转换为列表,其中eval是最简单的:

the_list = ["['eth', 'ethereum', 'nft', 'nonfungibletoken', 'token', 'crypto', 'digitalassets', 'etf', 'digitalcoin', 'ewallet', 'digitalgold', 'internetmoney', 'defi', 'decentralizedfinance', 'peertopeer', 'digitalcurrency', 'decentralizedmoney']"]

eval(the_list[0])

我会给你

['eth', 'ethereum', 'nft', 'nonfungibletoken', 'token', 'crypto', 'digitalassets', 'etf', 'digitalcoin', 'ewallet', 'digitalgold', 'internetmoney', 'defi', 'decentralizedfinance', 'peertopeer', 'digitalcurrency', 'decentralizedmoney']

编辑:如果您有多个字符串(根据您的编辑),则可以执行以下操作

[eval(item) for item in the_list]

编辑2:如果某些元素不是字符串(根据您随后的评论),您可以使用以下方法(我提供了一种展平的方法):

def eval_or_keep(element):
    return eval(element) if isinstance(element, str) else [element]


list_of_lists = [eval_or_keep(item) for item in the_list]

flattened_list = [item 
                  for sub_list in list_of_lists 
                  for item in sub_list]

相关问题 更多 >