让我们说你有这样的情况:
_, _, _, substring_1, _, substring_2 = some_string.split(',')
是否有表示前三个连续下划线的简写方式,表示要丢弃的值?我特别想知道是否存在这样的句法快捷方式,而不是关于完成相同任务的各种方法。
编辑 - 我对Python 2.7特定的答案感兴趣。
答案 0 :(得分:5)
您可以使用str.rsplit
限制:
>>> s = 'a,b,c,d,e,f'
>>> s.rsplit(',', 3) # i.e. split on at most three commas, from the right
['a,b,c', 'd', 'e', 'f']
>>> _, d, _, f = s.rsplit(',', 3)
>>> d
'd'
>>> f
'f'
如果你升级到Python 3.x,你可以使用*_
来吸收任意数量的元素(但是你会在2.x中得到SyntaxError
:
>>> *_, d, _, f = s.split(',')
>>> d
'd'
>>> f
'f'
答案 1 :(得分:4)
不是语法快捷方式,但您可能希望使用operator
模块中的from operator import itemgetter
my_pair = itemgetter(3, 5)
substring_1, substring_2 = my_pair(some_string.split(','))
函数:
my_pair
或者,定义split
以包含对def my_pair(x):
return itemgetter(3,5)(x.split(','))
substring_1, substring_2 = my_pair(some_string)
的调用:
- (void)viewDidLoad {
[super viewDidLoad];
NSFileManager *manager = [[NSFileManager alloc] init]; // Do any additional setup after loading the view.
[manager setDelegate:self];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents folder
[manager changeCurrentDirectoryPath:documentsDirectory];
}
- (BOOL)fileManager:(NSFileManager *)fileManager shouldMoveItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath{
NSLog(@"Attempt to move");
return YES;
}
答案 2 :(得分:2)
是的,如果你使用的是Python 3 和,那么你不关心在最后3个之前是否有多于或少于3个条目:
*_, first, _, second = somestring.split(',')
否则,如果您想要 last 3个元素(无论字符串有多少条目),您可以str.rsplit
使用Jon points out:
_, first, _, second = s.rsplit(',', 3)
如果你想要第3和第5个元素(无论字符串有多少元素),你可以使用chepner's answer:
from operator import itemgetter
extract = itemgetter(3, 5)
first, second = extract(s.split(','))
最后,如果必须是字符串中的六个条目,那么最好的选择是明确:
KeyFields = namedtuple('KeyFields', 'first second')
def extract_key_fields(s):
data = s.split(",")
if len(data) != 6:
raise ValueError("Must provide six fields")
return KeyFields(data[3], data[5])
key_fields = extract_key_fields(somestring)
key_fields.first # d
key_fields.second # f