Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:从字符串元组中获取第一个元素_Python_String_List_Tuples_Slice - Fatal编程技术网

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%。