我有一个包含类型元素的字符串列表
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').... ]
答案 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()