2011-03-28 3 views
14

Мне нужно объединить строку вместе со списком строк в кортеж, чтобы я мог использовать его в качестве словарного ключа. Это будет во внутреннем цикле, поэтому скорость важна.Создайте кортеж из строки и списка строк

Список будет небольшим (обычно 1, но иногда 2 или 3 предмета).

Каков самый быстрый способ сделать это?

Перед:

my_string == "foo" 
my_list == ["bar", "baz", "qux", "etc"] 

После того, как:

my_tuple == ("foo", "bar", "baz", "qux", "etc") 

(Примечание: my_list не должен быть изменен сам).

+1

вы используете _elements OF_ или весь кортеж как ДИК ключ? –

+0

, и если список невелик, почему скорость так важна? –

+0

Список, используемый для создания ключа, будет небольшим. Сам словарь будет довольно большим. – kes

ответ

15

Я не могу говорить за производительность, но это, безусловно, самый простой я могу думать:

my_tuple = tuple([my_string] + my_list) 
+13

'my_tuple = (my_string,) + tuple (my_list)' быстрее (около% 15). – saeedgnu

+0

@ilius: Аккуратно. Я понимаю, почему, поскольку вы только делаете кортежи в процессе, пропуская бит списка. – BoltClock

1

незамысловатым способом просто my_tuple = tuple(my_list + [my_string]). Я бы, конечно, начал с этого и посмотрел, приемлема ли производительность, прежде чем пытаться выяснить какие-то сумасшедшие способы подрыва нормальной системы для скорости.

+0

Как вопрос, 'my_string' должен быть первым элементом' my_tuple' не последним. – saeedgnu

+0

Ага, а затем просто отмените их, как с решением BoltClock. – dfan

-3

я думаю, что этот путь лучше:

my_list = my_list.insert(0,my_string) 
my_tuple = tuple(my_list) 
+1

Это изменяет 'my_list', который OP не хочет. И 'list.insert()' не возвращает список, поэтому вы не можете просто передать его в 'tuple()' cast. – BoltClock

+0

OP говорит, что 'my_list' не должен изменяться. –

Смежные вопросы