是否有一个函数可以从由字符串和其他列表组成的列表中删除分隔符?

2024-04-25 01:45:00 发布

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

我有一行是这样的:

Alain,David,43,"['Cinema:ABC', 'Cafe:Evasion', 'Hotel:Hotel Du Parc', 'Cafe:Casa del gelato']","['Notebook', 'Cigarette électronique', 'Livre:Roman']","['Matin:8h-10h', 'Apres-midi:12h-15h']","['Politique']

我尝试删除分隔符([,],“”,“”),以获得类似的结果,以便以后计算行之间的相似性:

Alain,David,43,Cinema:ABC, Cafe:Evasion, Hotel:Hotel Du Parc, Cafe:Casa del gelato,Notebook, Cigarette électronique, Livre:Roman,Matin:8h-10h, Apres-midi:12h-15h,Politique

但是失败了! 你知道吗?你知道吗


Tags: cafehoteldavidabcnotebookdudelcinema
2条回答

我想你有列表,不是字符串

 row = ['Alain','David',43,"['Cinema:ABC', 'Cafe:Evasion', 'Hotel:Hotel Du Parc', 'Cafe:Casa del gelato']","['Notebook', 'Cigarette électronique', 'Livre:Roman']","['Matin:8h-10h', 'Apres-midi:12h-15h']","['Politique']"]

在某些列中有带列表的字符串。必须将字符串转换回列表。可以使用eval()将字符串转换为Python的列表。你知道吗

result = []

for item in row:
    if isinstance(item, str) and item.startswith('['):
        result += eval(item)
    else:
        result.append(item)

print(result)    

编辑:

你可以用

file.writerow([
   random.choice(Prenoms),
   random.choice(Noms),
   random.randint(17,65),
   random.sample(Lfreq,4)
])

random.sample(Lfreq,4)给出了一个列表,您必须将其作为单独的列来编写。你知道吗

data = random.sample(Lfreq,4)

file.writerow([
    random.choice(Prenoms), 
    random.choice(Noms),
    random.randint(17,65), 
    data[0], 
    data[1], 
    data[2], 
    data[3]
])

或使用extend+=扩展列表

data = [random.choice(Prenoms), random.choice(Noms), random.randint(17,65)]

#data.extend(random.sample(Lfreq,4))
data += random.sample(Lfreq,4)

file.writerow(data)

有一个函数可以解决这个问题。你知道吗

# -*- coding: utf-8 -*-

import re

def plain_array_from_array_with_subarrays_as_strings(array):
    response = []
    for el in array:
        if not isinstance(el, (int, float)):
            sub_els = re.findall(r"'([^']+)'", el)
            if len(sub_els) > 0:
                for sub_el in sub_els:
                    response.append(sub_el)
            else:
                response.append(el)
        else:
            response.append(el)
    return response

r = [
    "Alain",
    "David",
    43,
    "['Cinema:ABC', 'Cafe:Evasion', 'Hotel:Hotel Du Parc', 'Cafe:Casa del gelato']",
    "['Notebook', 'Cigarette électronique', 'Livre:Roman']",
    "['Matin:8h-10h', 'Apres-midi:12h-15h']",
    "['Politique']"
]    
print(plain_array_from_array_with_subarrays_as_strings(r))

输出:

['Alain',
 'David',
 43,
 'Cinema:ABC',
 'Cafe:Evasion',
 'Hotel:Hotel Du Parc',
 'Cafe:Casa del gelato',
 'Notebook',
 'Cigarette électronique',
 'Livre:Roman',
 'Matin:8h-10h',
 'Apres-midi:12h-15h',
 'Politique']

相关问题 更多 >