Python:从字符串元组中获取第一个元素
我有以下查询:是否可以逐片获取元组中每个字符串的第一个符号的元组? 我尝试了以下代码:Python:从字符串元组中获取第一个元素,python,string,list,tuples,slice,Python,String,List,Tuples,Slice,我有以下查询:是否可以逐片获取元组中每个字符串的第一个符号的元组? 我尝试了以下代码: t = ("aaa", "aab", "abc", "aba", "bcc") print(t[:][0]) 我得了“aaa”。我想要的是['a','a','a','a','b']。 确保可以由发电机完成: letters = (x[0] for x in t) 但是有没有可能用切片的方法呢? 谢谢。以下代码没有明确使用切片,但它非常有效: letters = next(zip(*t)) letters
t = ("aaa", "aab", "abc", "aba", "bcc")
print(t[:][0])
我得了“aaa”。我想要的是['a','a','a','a','b']。
确保可以由发电机完成:
letters = (x[0] for x in t)
但是有没有可能用切片的方法呢?
谢谢。以下代码没有明确使用切片,但它非常有效:
letters = next(zip(*t))
letters
#('a', 'a', 'a', 'a', 'b')
此方法比使用选择(
[0]
)的列表理解快25%,比使用切片([:1]
)的列表理解快48%。以下代码没有明确使用切片,但非常有效:
letters = next(zip(*t))
letters
#('a', 'a', 'a', 'a', 'b')
此方法比使用选择的列表理解快25%(
[0]
),比使用切片的列表理解快48%。经典解决方案是使用列表理解。另一种功能性的方法是使用操作符.itemgetter
但您可以通过第三方NumPy更接近矢量化功能。在这里,您将看到性能的巨大改进。切片是琐碎的;成本主要来自转换为NumPy阵列
NumPy解决方案假定字符串长度相同,并且您可以将输出作为数组而不是列表:
res = np.array(t).view('<U1')[::len(t[0])]
res=np.array(t).view(经典的解决方案是使用列表理解。另一种功能性的方法是使用操作符.itemgetter
但是,您可以通过第三方NumPy更接近矢量化功能。在这里,您应该看到性能的巨大改进。切片非常简单;成本主要来自转换为NumPy阵列
NumPy解决方案假定字符串长度相同,并且您可以将输出作为数组而不是列表:
res = np.array(t).view('<U1')[::len(t[0])]
res=np.array(t).view('No)这是不可能的,因为一个片不能返回多个字符串。
您需要在元组[x[0]上循环[t]中的i]。不可能,因为切片不能返回多个字符串。
你需要在元组[x[0]上循环[i in t]。你应该使用列表理解:letters=[x[0]for x in t]
。我不知道如何单独使用切片来实现这一点……但如果可能的话,我会感兴趣的……找不到更好的切片:[x[0:1]for x in t]
@Austin[x[:1]for x in t]
甚至更好。就性能而言,[:1]比[0:1]快10%。您应该使用列表理解:字母=[x[0]表示x in t]
。我不知道如何单独使用切片来实现这一点……但如果可能的话,我会感兴趣……找不到更好的切片:[x[0:1]表示x in t]
@Austin[x[:1]表示x in t]
甚至更好。就性能而言,[:1]比[0:1]快10%。