পাইথনের স্ট্রিংয়ের তালিকায় একই স্ট্রিং যুক্ত করা


182

আমি একটি স্ট্রিং নেওয়ার চেষ্টা করছি, এবং এটি তালিকায় থাকা প্রতিটি স্ট্রিংয়ের সাথে যুক্ত করব এবং তারপরে সম্পূর্ণ স্ট্রিংগুলির সাথে একটি নতুন তালিকা আছে। উদাহরণ:

list = ['foo', 'fob', 'faz', 'funk']
string = 'bar'

*magic*

list2 = ['foobar', 'fobbar', 'fazbar', 'funkbar']

আমি লুপগুলির জন্য চেষ্টা করেছি, এবং তালিকা বোঝার চেষ্টা করেছি, তবে এটি আবর্জনা ছিল। সর্বদা হিসাবে, কোনও সহায়তা, অনেক প্রশংসা করা।


25
এটি listঅন্তর্নির্মিত হওয়ায় নির্ধারণ করা বুদ্ধিমানের কাজ নয়।
নওফাল ইব্রাহিম

উত্তর:


313

এটি করার সহজ উপায় হল তালিকা বোঝার সাথে:

[s + mystring for s in mylist]

লক্ষ্য করুন যে আমি অন্তর্নির্মিত নামগুলি ব্যবহার করা এড়িয়ে চলেছি listকারণ সেগুলি ছায়া বা অন্তর্নির্মিত নামগুলি লুকিয়ে রাখে, যা খুব ভাল নয়।

এছাড়াও, যদি আপনার আসলে তালিকার প্রয়োজন না হয় তবে কেবল একটি পুনরুক্তি প্রয়োজন, একটি জেনারেটর এক্সপ্রেশন আরও দক্ষ হতে পারে (যদিও এটি সংক্ষিপ্ত তালিকার পক্ষে গুরুত্বপূর্ণ নয়):

(s + mystring for s in mylist)

এগুলি খুব শক্তিশালী, নমনীয় এবং সংক্ষিপ্ত। প্রতিটি ভাল অজগর প্রোগ্রামার তাদের চালিত করা শিখতে হবে।


8
অথবা একটি জিনপ্যাক যদি আপনি এটি অলসভাবে চান(s + mystring for s in mylist)
নওফাল ইব্রাহিম

এটি অবশ্যই কৌশলটি করেছে, অনেক ধন্যবাদ, এখনও তালিকার বোঝার জন্য আমার মাথাটি জড়িয়ে রাখছে, যদি আপনি এটি সম্পর্কে একটি ভাল টিউটোরিয়াল জানেন। তালিকার প্রতিটি আইটেমের আগে একটি ইউ আছে, এটি কি ইউনিকোডের জন্য?
কেভিন

3
@Kevin, এখানে, ইউনিকোড স্ট্রিং জন্য একটি টিউটোরিয়াল এর docs.python.org/tutorial/introduction.html#tut-unicodestrings
tgray

আপনার যদি তালিকা থেকে সূচকের প্রয়োজন হয় তবে আপনি যা করতে পারেন["{}) {}".format(i, s) for i, s in enumerate(mylist)]
ভ্যাপিড লিনাস

1
কিছু লক্ষণীয়: আপনি যদি "এস" এর আগে "মাইস্ট্রিং" যোগ করেন তবে তার চেয়ে এটি "এস" এর শুরুতে "মাইস্ট্রিং "টিকে সম্মতিযুক্ত করবে। list2 = ["mystring" + s for s in mylist]list2 = ['barfoo', 'barfob', 'barfaz', 'barfunk']
লাইকের


5

map আমার কাছে কাজের সঠিক সরঞ্জাম বলে মনে হচ্ছে।

my_list = ['foo', 'fob', 'faz', 'funk']
string = 'bar'
list2 = list(map(lambda orig_string: orig_string + string, my_list))

আরও উদাহরণের জন্য ক্রিয়ামূলক প্রোগ্রামিং সরঞ্জামগুলিতে এই বিভাগটি দেখুন map


2

পাইথোনিক পদ্ধতিতে নিম্নলিখিত পরীক্ষা চালানো:

[s + mystring for s in mylist]

এটির মতো লুপের স্পষ্ট ব্যবহারের চেয়ে 35% বেশি দ্রুত বলে মনে হচ্ছে:

i = 0
for s in mylist:
    mylist[i] = s+mystring
    i = i + 1

পরীক্ষা

import random
import string
import time

mystring = '/test/'

l = []
ref_list = []

for i in xrange( 10**6 ):
    ref_list.append( ''.join(random.choice(string.ascii_lowercase) for i in range(10)) )

for numOfElements in [5, 10, 15 ]:

    l = ref_list*numOfElements
    print 'Number of elements:', len(l)

    l1 = list( l )
    l2 = list( l )

    # Method A
    start_time = time.time()
    l2 = [s + mystring for s in l2]
    stop_time = time.time()
    dt1 = stop_time - start_time
    del l2
    #~ print "Method A: %s seconds" % (dt1)

    # Method B
    start_time = time.time()
    i = 0
    for s in l1:
        l1[i] = s+mystring
        i = i + 1
    stop_time = time.time()
    dt0 = stop_time - start_time
    del l1
    del l
    #~ print "Method B: %s seconds" % (dt0)

    print 'Method A is %.1f%% faster than Method B' % ((1 - dt1/dt0)*100)

ফলাফল

Number of elements: 5000000
Method A is 38.4% faster than Method B
Number of elements: 10000000
Method A is 33.8% faster than Method B
Number of elements: 15000000
Method A is 35.5% faster than Method B

2

"স্ট্রিংয়ের তালিকায় স্ট্রিংয়ের একটি তালিকা যুক্ত করা" এ কিছুটা প্রসারিত করা:

    import numpy as np
    lst1 = ['a','b','c','d','e']
    lst2 = ['1','2','3','4','5']

    at = np.full(fill_value='@',shape=len(lst1),dtype=object) #optional third list
    result = np.array(lst1,dtype=object)+at+np.array(lst2,dtype=object)

ফলাফল:

array(['a@1', 'b@2', 'c@3', 'd@4', 'e@5'], dtype=object)

dtype অবজেক্ট আরও স্ট্র রূপান্তরিত হতে পারে


আপডেট: আপনি একই প্রতীকটি একাধিক বার অনুলিপি করতে এড়াতে পারবেন: at = np.full(fill_value='@',shape=1,dtype=object) বা সহজভাবে: at = np.array("@", dtype=object)
আর্তুর সোকলোভস্কি

1

আপনি পাইথনে মানচিত্রের ভিতরে ল্যাম্বদা ব্যবহার করতে পারেন। একটি ধূসর কোড জেনারেটর লিখেছেন। https://github.com/rdm750/rdm750.github.io/blob/master/python/gray_code_generator.py # আপনার কোডটি এখানে 'এন' -1 বিট কোডে চলে যায়, প্রতিটি শব্দের সাথে 0 চাপিয়ে দেওয়া হয়, তারপরে বিপরীত ক্রমে n-1 বিট কোড, প্রতিটি শব্দের সাথে 1 টি প্রম্পেন্ড করা। '' '

    def graycode(n):
        if n==1:
            return ['0','1']
        else:
            nbit=map(lambda x:'0'+x,graycode(n-1))+map(lambda x:'1'+x,graycode(n-1)[::-1])
            return nbit

    for i in xrange(1,7):
        print map(int,graycode(i))

1

আরও বিকল্পের সাথে আপডেট করা হচ্ছে

list1 = ['foo', 'fob', 'faz', 'funk']
addstring = 'bar'
for index, value in enumerate(list1):
    list1[index] = addstring + value #this will prepend the string
    #list1[index] = value + addstring this will append the string

পরিবর্তে 'তালিকা', পরিবর্তে 'তালিকা' হিসাবে 'তালিকা 1' হিসাবে পরিবর্তনশীল হিসাবে কীওয়ার্ডগুলি ব্যবহার করা থেকে বিরত থাকুন


এটি একটি ভাল পরামর্শ। আর একটি হ'ল অ্যারে_ম্যাপটি এমন একটি ফাংশন যা স্ট্রিং সংযোজন করে ব্যবহার করা হবে ... php.net/manual/en/function.array-map.php
রোউনফএফ

1

এখানে একটি সাধারণ উত্তর ব্যবহার করে pandas

import pandas as pd
list1 = ['foo', 'fob', 'faz', 'funk']
string = 'bar'

list2 = (pd.Series(list1) + string).tolist()
list2
# ['foobar', 'fobbar', 'fazbar', 'funkbar']

দয়া করে তালিকা এবং স্ট্রিং থেকে ভেরিয়েবলের নাম পরিবর্তন করে অন্য কোনও কিছু করুন। তালিকাটি একটি বিল্টিন পাইথন প্রকার
সাগী

0
list2 = ['%sbar' % (x,) for x in list]

এবং listনাম হিসাবে ব্যবহার করবেন না ; এটি অন্তর্নির্মিত প্রকারের ছায়া দেয়।


এর '%sbar' % (x,)বদলে কেন '%sbar' % x? না কেন x + 'bar'?
জন মাচিন

1
দ্বিতীয়টি ব্যর্থ হবে যদি এক্স টিউপল হতে পারে। স্পষ্টতই আপনি প্রতিটি উপাদান একটি স্ট্রিং হতে পরিকল্পনা , কিন্তু কখনও কখনও জিনিস ভুল হয়ে যায়। প্রথম এবং তৃতীয়টির মধ্যে পার্থক্য বেশিরভাগ স্বাদযুক্ত, যদি না আপনি কোনও বাহ্যিক উত্স থেকে স্ট্রিংটি পান।
ইগনাসিও ওয়াজকেজ-আব্রামস

2
'উত্থাপন ব্যতিক্রম'! = 'ব্যর্থ' আপনার যদি ভুল ডেটা টাইপ থাকে তবে আপনি ইতিমধ্যে ব্যর্থ হয়ে গেছেন। আমার পছন্দ মত প্রকাশ ব্যর্থতা হাইলাইট একটি ব্যতিক্রম উত্থাপন; আপনার পছন্দসই অভিব্যক্তি নীরবে আবর্জনা উত্পাদন করে। স্বাদ: বারোক ধীর অভিব্যক্তি আমার স্বাদে আসে না।
জন মাচিন

0
new_list = [word_in_list + end_string for word_in_list in old_list]

আপনার পরিবর্তনশীল নামের জন্য "তালিকা" এর মতো নাম ব্যবহার করা খারাপ কারণ এটি বিল্টিনগুলিকে ওভাররাইট / ওভাররাইড করবে।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.