列表中用逗号分隔的单独元素

时间:2020-02-03 20:29:21

标签: python python-3.x string list

我有一个包含类型元素的字符串列表

List=['name1,vol', 'name1,price','name2, vol', 'name2,price'.... ] 

我只想提取“名称”的列表,这些名称实际上是随着每个元素中的第二个组件具有固定模式(此处:vol,price)而实际更改的部分。请注意,“名称”显然可以具有不同的长度。综上所述,我想提取以下内容:

List_names=['name1', 'name2' ] 

我该怎么做?

如果我有某种类型的东西怎么办?

List_tricky=[('name1', 'vol'), ('name1', 'price'),('name2', 'vol'), ('name2', 'price').... ] 

7 个答案:

答案 0 :(得分:2)

像这样吗?

List=['name1,vol', 'name1,price','name2, vol', 'name2,price']

names = []

for string in List:

    name = string.split(',')[0]

    names.append(name)

print(names)

对于“棘手”的情况,您可以尝试:

# initialize variables:
names = []

# iterate over each point (tuple):
for point in List:

    # get name:
    name = point[0]

    # append to list:
    names.append(name)

print(names)

答案 1 :(得分:1)

与@Daniel Sokol的答案类似的逻辑,您可以使用一个衬里:

list2 = [x.split(',')[0] for x in List]

答案 2 :(得分:1)

您可以将其变成字典,然后使用str.split返回列表。 (不需要循环,因为它可以为您高效地执行此操作)使用functools.partial将拆分应用于每个字符串,而不是lambda:

from functools import partial
list(dict(map(partial(str.split, sep=','), List)))

这对于输入中的任何一个都有效,但是对于元组列表更简单:

>>> l = ['name1,vol', 'name1,price','name2, vol', 'name2,price'.... ]
>>> list(dict(map(partial(str.split, sep=','), List)))
['name1', 'name2']

>>> l = [('name1', 'vol'), ('name1', 'price'),('name2', 'vol'), ('name2', 'price').... ] 
>>> list(dict(l))
['name1', 'name2']

答案 3 :(得分:1)

要在@Alireza Tajadod已经非常好的答案之上添加内容,您可能希望将转换应用于集合,然后返回列表以删除所有可能的重复项,如@ Cryptoharf84在评论中建议的那样。

names_list = list(set([entry.split(',')[0] for entry in List]))

具有列表理解的相同逻辑可以应用于棘手的情况。

names_list_2 = list(set([entry[0] for entry in List_tricky]))

要使列表理解更明确,您还可以执行以下操作:

names_list_3 = list(set([name for name, _ in List_tricky]))

_表示我们正在丢弃未打包元组的第二个值。

集合很有用,因为将具有重复元素的列表转换为集合会有效地删除所有重复项。

答案 4 :(得分:0)

作为提示,请在python中查找命名约定。但是永远不要以大写字母或现有的类名开头变量。

我会尝试类似的东西

list_names = [s.split(',')[0].strip() for s in List]
list_unique_names(set(list_names))

split返回原始字符串的“块”列表,并剥离以删除结果字符串开头/结尾的空格。

答案 5 :(得分:0)

我将您的数据结构更改为dict,而不是list

d={'name1': ('vol', 'price'),'name2': ('vol', 'price'), .... }

为了仅获取名称: d.keys()

答案 6 :(得分:0)

您还可以使用 1. Office.ProjectResourceFields.Name, 2. Office.ProjectResourceFields.ResourceGUID 函数:

.map()