将列表列表转换回元组列表

时间:2015-06-22 15:23:50

标签: python list tuples

我有一个由多个元组(超过100个)组成的长列表,它们都包含3个字符串项

 first_list = ('the','cat','went'),('back','too','scho'),('t/e','s/e/t','o/ve') etc

许多元组都是相同的,所以我使用set函数来获得一个独特的集合

Long_list = set(first_list)

我需要原始格式的列表,但我还需要一个重复列表来清理数据 我需要删除所有“/”并用“@”替换它们 我似乎无法做这个过程。最初我尝试创建一个foor循环来遍历我的列表,然后执行查找和替换方法。

我这样做的方式给了我一个由项组成的新列表,因此不保留元组集

 for small_tuple in Long_list:

    the_list = list(small_tuple)

    for uncleaned_string in the_list:


            time = uncleaned_string.replace('/','@')
            last_list.append(time)
print last_list

当我将其转换回来时,有没有办法可以保留元组中3个项目的原始格式?

5 个答案:

答案 0 :(得分:2)

tuple(myList)会将myList转换为元组,前提是myList可以像listtuple或生成器那样进行迭代。

使用列表推导表达式转换元组列表中的列表列表:

last_list = [tuple(x) for x in Long_list]

或者,还要执行字符串替换:

last_list = [tuple(y.replace('/', '@') for y in x) for x in Long_list]

来自Python的参考:

  

元组([可迭代])

     

返回一个元组,其项目与iterable的项目相同且顺序相同。 iterable可以是一个序列,一个支持迭代的容器,或一个迭代器对象。如果iterable已经是一个元组,则返回不变。例如,tuple('abc')返回('a', 'b', 'c')tuple([1, 2, 3])返回(1, 2, 3)。如果没有给出参数,则返回一个新的空元组()

     

tuple是一种不可变的序列类型,如Sequence Types — str, unicode, list, tuple, bytearray, buffer, xrange中所述。对于其他容器,请参阅内置的dictlist和[set]类以及collections模块。

答案 1 :(得分:0)

您可以使用转换为元组的列表推导来执行以下操作:

 for small_tuple in Long_list:

    the_list = list(small_tuple)

    last_list.append(tuple([uncleaned_string.replace('/','@') for uncleaned_string in the_list]))

print last_list

答案 2 :(得分:0)

last_list = [tuple(s.replace('/', '@') for s in t) for t in Long_list]

答案 3 :(得分:0)

修改您的代码以满足您的需求

Process: com.demo.wear, PID: 20332
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.demo.wear/com.demo.wear.ui.WishesActivity}: java.lang.ClassNotFoundException: Didn't find class "com.demo.wear.ui.WishesActivity" on path: DexPathList[[zip file "/data/app/com.demo.wear-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2236)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
        at android.app.ActivityThread.access$800(ActivityThread.java:151)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5254)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
 Caused by: java.lang.ClassNotFoundException: Didn't find class "com.demo.wear.ui.WishesActivity" on path: DexPathList[[zip file "/data/app/com.demo.wear-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
        at android.app.Instrumentation.newActivity(Instrumentation.java:1066)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2226)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
            at android.app.ActivityThread.access$800(ActivityThread.java:151)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5254)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Suppressed: java.lang.NoClassDefFoundError: com.demo.wear.ui.WishesActivity
        at dalvik.system.DexFile.defineClassNative(Native Method)
        at dalvik.system.DexFile.defineClass(DexFile.java:226)
        at dalvik.system.DexFile.loadClassBinaryName(DexFile.java:219)
        at dalvik.system.DexPathList.findClass(DexPathList.java:321)
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:54)
        ... 14 more
Suppressed: java.lang.ClassNotFoundException: com.demo.wear.ui.WishesActivity
        at java.lang.Class.classForName(Native Method)
        at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
        at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
        ... 13 more
 Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available

答案 4 :(得分:0)

您可以使用OrderedDict删除重复项,同时保留订单。

from collections import OrderedDict

x = OrderedDict.fromkeys(first_list)
Long_list = list(x)

Long_list包含与first_list相同的唯一元组。