是否存在从包含字符串和其他列表的列表中删除定界符的功能?

时间:2019-05-01 12:29:21

标签: 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

但是失败了! 有想法吗?

2 个答案:

答案 0 :(得分:0)

我认为您有列表,而不是字符串

 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)

答案 1 :(得分:0)

有一个函数可以解决这个问题。

# -*- 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']