Python根据给定的密钥组合了2个列表

时间:2015-07-03 02:05:31

标签: python list

我正在处理一个问题,这里是输入

from django.contrib.auth.models import User
data = session.get_decoded()
uid = data.get('_auth_user_id', None)
user = User.objects.get(id = uid)

输出如下:

list1 = ['A', 'U', 'C', 'C', 'A']
list2 = ['12', '14']
key = {'A12':'*', 'C14':'#'}

并转换为

output1 = [['A12', 'U', 'C14', 'C', 'A'], ['A12', 'U', 'C', 'C14', 'A'],['A', 'U', 'C14', 'C', 'A12'], ['A', 'U', 'C', 'C14', 'A12']]

我使用Python2.7来解决这个问题,但我还没想出来......任何答案或建议都将不胜感激!

这是我的代码:

output2 = [['*', 'U', '#', 'C', 'A'], ['*', 'U', 'C', '#', 'A'],['A', 'U', '#', 'C', '*'], ['A', 'U', 'C', '#', '*']]

输出中有一些额外的列表,如果list2或list3太大,运行itertools.permutations将花费大量时间,所以我正在寻找另一种方法来解决这个问题。

1 个答案:

答案 0 :(得分:1)

好的,这有点长,所以请耐心等待。第一步是构建一个字典,将字母转换为带有数字的字母,即itertools.productoutput1 = [] output2 = [] for group in itertools.product(*indicies): l = [] l2 = [] for i in range(len(list1)): l.append(list1[i] if i not in group else replacements[list1[i]]) l2.append(list1[i] if i not in group else key[replacements[list1[i]]]) output1.append(l) output2.append(l2) print output1 print output2 等。

[['A12', 'U', 'C14', 'C', 'A'], ['A12', 'U', 'C', 'C14', 'A'], ['A', 'U', 'C14', 'C', 'A12'], ['A', 'U', 'C', 'C14', 'A12']]
[['*', 'U', '#', 'C', 'A'], ['*', 'U', 'C', '#', 'A'], ['A', 'U', '#', 'C', '*'], ['A', 'U', 'C', '#', '*']]

这使事情变得更加简单。下一步是建立一个列表,列出所有需要替换的指标,并将这些指标分解为每种替换类型的子列表。

n!

最后,我们在需要替换的索引列表上使用n来获取每个可能的分组,然后将它们添加到必要的输出列表中:

list1

这给了我们想要的答案:

.sendTextMessage

此代码与您运行的代码之间的一个主要区别是,我的代码仅运行所需的完全迭代次数,因此对于示例数据集,则为4次。您的代码似乎至少运行至少某些部分 protected void sendSMSMessage() { Log.i("Send SMS", ""); String phoneNo = txtphoneNo.getText().toString(); String message = txtMessage.getText().toString(); try { SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage(phoneNo, null, message, null, null); Toast.makeText(getApplicationContext(), "SMS sent.", Toast.LENGTH_LONG).show(); } catch (Exception e) { Toast.makeText(getApplicationContext(), "SMS faild, please try again.", Toast.LENGTH_LONG).show(); e.printStackTrace(); } } 次,其中border: 1px solid white; 的大小为[1,"yes","no","maybe"] ,并且等于示例数据集的120。这仍然可能在非常大的数据集上运行一段时间(这种问题的性质),但只会扩大它必须做的替换次数,而不是整体数据集的大小